Android Realm删除对象列表的误区

时间:2016-10-23 14:10:57

标签: android realm

我有以下对象列表:

{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.

2 个答案:

答案 0 :(得分:2)

你们所有的方法都应该起作用,realm.delete(Z.class);应该是最简单的方法。

有两种可能性,据我所知它不起作用:

  1. 您可能会遇到一些代码,这些代码会再次将Z保存到Realm数据库,尝试设置断点来检查?

  2. 检查getZObjects()的代码不在looper线程上,Realm db不会在那里自动更新。尝试在非looper线程上关闭/重新打开Realm。如果它位于looper线程上,则db将在下一个偶数循环中更新。

答案 1 :(得分:1)

如果已知的数字和上面的少量卡片可以使用,但如果你试图生成未知数量的卡片,最好使用回收者视图

希望这个例子可以帮到你 https://dzone.com/articles/be-lazy-productive-android-2