我有如下对象列表:
{A:
{B:"",
C:"",
D:[{Z:""},
{Z:[{x:""}]},
{Z:[{x:""},{x:""},{x:""}]},
{Z:[{x:""},{x:""}]},
{Z:[{x:""},{x:""},{x:""},{x:""}]}
]
}
}
我在运行时更新Z的对象,在一个特定的位置,我想删除Z的所有对象并删除它的数据。我使用了以下语句:
RealmResults<A> aToEdit = realm.where(A.class).findAll();
RealmList<D> dsToEdit = aToEdit.get(0).getDs();
for (int i = dsToEdit.size()-1; i >= 0; i--) {
D d = dsToEdit.get(i);
RealmList<Z> z = d.getZ();
z.deleteAllFromRealm();
}
和
RealmResults<Z> resultToDelete = realm.where(Z.class).findAll();
resultToDelete.deleteAllFromRealm();
和
for (int x = 0 ; x < resultToDelete.size() ; x++){
resultToDelete.get(x).deleteFromRealm();
}
和
realm.delete(Z.class);
但不幸的是,当我再次调用getZObjects时,它们都不能正常工作,它将返回更新后的对象,而不是空或null。
谁能帮我找出我在这里错过了什么?目标是从Realm数据库中删除所有的Z。
你们所有的方法都应该是有效的,而realm.delete(Z.class);
应该是最简单的方法。
据我所知,有两种可能它不起作用:
-
你可能会遇到一些代码,其中保存Z到Realm db再次,尝试设置一个断点来检查?
-
检查
getZObjects()
的代码不在循环线程上,Realm db不会在那里自动更新。尝试在非循环线程上关闭/重新打开Realm。如果在循环线程中,db将在下一个偶数循环中更新。
如果卡片数量已知且卡片数量较少,则上述方法有效,但如果您试图生成未知数量的卡片,则最好使用回收器视图
希望这个例子对你有帮助https://dzone.com/articles/be-lazy-productive-android-2