2016-01-27 12 views
1

我有一行返回RealmResult与一些排序的数据。如何删除RealmResults列表中最快和最简单的所有项目?

我想删除所有这些项目最快,最简单。例如:

RealmResults<ElementEntry> currentElements = realm.where(ElementEntry.class).equalTo("type", 1).findAll(); 

//something like this then, would be preffered: 
currentElements.removeFromRealm(); 

但我必须使用迭代器和什么,而不是,但是当我尝试,我得到这个错误:

java.util.ConcurrentModificationException: No outside changes to a Realm is allowed while iterating a RealmResults. Use iterators methods instead. 

,所以我可以用什么,如果不是非常迭代器那应该被使用?

回答

3

尝试清除方法

从文档:

Removes all objects from the list. This also deletes the objects from the underlying Realm. 
@throws IllegalStateException if the corresponding Realm is closed or in an incorrect thread. 

https://github.com/realm/realm-java/blob/master/realm/realm-library/src/main/java/io/realm/RealmResults.java#L636

realm.beginTransaction(); 
currentElements.clear() 
realm.commitTransaction(); 
+0

这是正确的 - 从这个问题追踪器也找到了“清除”方法:https://github.com/realm/realm-java/pull/2061 –

+2

Clear()现在折旧了,使用deleteAllFromRealm()代替 – Kenny

2

要啦免费统计在realmResults所有对象做到这一点:

RealmResults<Dog> results = realm.where(Dog.class).findAll(); 

// All changes to data must happen in a transaction 
realm.beginTransaction(); 
results.clear(); 
realm.commitTransaction() 

要遍历你可以这样做:

realm.beginTransaction(); 
for (int i = 0; i < results.size(); i++) { 
    results.get(i).setProperty("foo"); 
} 
realm.commitTransaction(); 
+1

再次,clear()现在在RealmResults上折旧使用deleteAllFromRealm() – Kenny

+0

好吧,我在Realm 2.8.3中有以下代码:'do realm = try Realm() try realm.write { var results = realm.objects(Category.self) results.removeAll() results.deleteAllFromRealm() results.clear() } }赶上{} '全部三种方法没有在结果<>数据类型中定义。这个问题的*当前*答案是什么? – axello

2

clear()已被弃用。你应该使用deleteAllFromRealm()

删除查询的结果:

final RealmResults<Dog> results = realm.where(Dog.class).findAll(); 

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     // remove single match 
     results.deleteFirstFromRealm(); 
     results.deleteLastFromRealm(); 

     // remove a single object 
     Dog dog = results.get(5); 
     dog.deleteFromRealm(); 

     // Delete all matches 
     results.deleteAllFromRealm(); 
    } 
}); 

删除域数据库中的所有对象:

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
     realm.deleteAll(); 
    } 
}); 
0

好吧,我使用的境界2.8.3,并具有以下代码:

do { 
     let realm = try Realm() 
     try realm.write { 
      var results = realm.objects(Category.self) 
      results.removeAll() 
      results.deleteAllFromRealm() 
      results.clear() 
     } 
    } catch {} 

结果<>数据类型中未定义所有三种方法。什么是当前这个问题的答案?

相关问题