Realm: 迭代一个 RealmObject 并清空一个 ArrayList 字段

5

我有一个 RealmResults<Section>,其具有一个 RealmList<Event> 字段,我希望在每个 Section 上清除它。

我已经尝试过(在 mRealm.executeTransaction 内部):

for (Section section : mSections) {
    section.getEvents().clear();
}

并且

Iterator<Section> sectionIterator = mSections.iterator();
while (sectionIterator.hasNext()) {
    sectionIterator.next().getEvents().clear();
}

但是Realm会抛出这个异常

java.util.ConcurrentModificationException: 在遍历RealmResults时不允许对Realm进行外部更改。请使用迭代器方法。


getEvents() 返回什么?又是另一个 ArrayList 吗? - Daniel Nugent
Events对象是一个RealmList<Event>,它基本上就像一个ArrayList。 - Ben
2
你试过使用传统的for循环吗?这可能会起作用,因为你实际上并没有删除正在迭代的项目。 - Daniel Nugent
我简直不敢相信我以前没有尝试过那个!它起作用了,谢谢! - Ben
1个回答

7

由于您实际上并没有删除正在迭代的元素,因此可以使用传统的for循环:

for (int i = 0; i < mSections.size(); i++) {
    mSections.get(i).getEvents().clear();
}

请注意,如果您需要使用迭代器删除元素,则需要在迭代器本身上使用remove()方法。 查看文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接