【发布时间】:2016-11-30 08:09:24
【问题描述】:
public RealmList<CategoriesDto> getListOfCategories(String type){
final RealmList<CategoriesDto> listOfCategories = new RealmList<>();
final CategoriesDto categoriesDto = realm.where(CategoriesDto.class).equalTo("identifier", type).findFirst();
if (categoriesDto != null) {
realm.beginTransaction();
RealmResults<CategoriesDto> categories = realm.where(CategoriesDto.class).equalTo("parentId", categoriesDto.getCategoryId()).findAll();
for (int i = 0; i < categories.size(); i++) {
listOfCategories.add(categories.get(i));
}
// realm.commitTransaction();
}
return listOfCategories;
}
我在一个方法中查询领域两次,并收到此错误,我在每次查询后都尝试了realm.beginTransaction() 和realm.commitTransaction()。
还有一件事:这个查询只从领域数据库中读取数据。
在数据库中写入数据我们一般使用commit来持久化数据。
我也尝试过realm.commitTransaction(),但我遇到了同样的错误。
【问题讨论】:
-
我对领域一无所知。在读取查询之前真的需要调用 beginTransaction() 吗?
-
是的,如果你没有调用那么应用程序也会崩溃并且错误是“你需要调用 reaml.beginTransactio()”
-
您是否尝试在 for 循环中添加
beginTransaction和commitTransaction? -
@Sagar 我们正在查询 forloop 之外的领域,为什么我们可以在 foorloop 中 beginTransaction() 和 commitTransaction() ,如果我取消评论 reaml.commitTransaction() 那么这个错误来了“更改 Realm 数据只能在事务内部完成。”
-
为什么你甚至需要
RealmList?为什么不使用RealmResults?它也是List。这确实取决于您的用例,并且对于这么多的代码,我只能说您没有按预期使用 Realm。