copyToRealmOrUpdate在RealmResults中删除了更新的对象

时间:2018-09-27 09:01:13

标签: android realm

我刚刚了解了领域,并且发生了一些奇怪的事情。我有3个活动,分别称为A,B和C。

在活动A(主屏幕)中,我致电服务从互联网下载数据并将其存储在领域中。

在活动B(查看屏幕)中,我使用RealmResult和recyclerview显示所有数据

List<Data> dataList = new ArrayList<>();
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
rvAdapter = new RvAdapter(dataList);
recyclerView.setAdapter(rvAdapter);
RealmResults<Data> manyData = realm.where(Data.class)
            .equalTo("date", currentDate)
            .findAll();

for (int i = 0; i < manyData.size(); i++) {
    dataList.add(new Data(manyData.get(i).getName(),manyData.get(i).getAge()));
}
rvAdapter.notifyDataSetChanged();

在活动C(“插入/更新”屏幕)中,我尝试插入或更新数据

首先,在活动A和活动B中没有错。 recyclerview按预期显示数据。然后,在更新活动C中的对象后,发生了一些奇怪的事情。

使用

Data data = new Data();
data.setId(id);
data.setName(name);
data.setAge(age);
data.setDate(today);
realm.beginTransaction();
realm.copyToRealmOrUpdate(data);
realm.commitTransaction();
realm.close();
finish();

finish()之后;从堆栈中清除活动C,并显示活动B。但是我更新的数据已从recyclerview中删除,这很奇怪。当我在活动B中打印manyData.size()时,它表明大小减小了1个元素。有人可以给我一些指导吗?

1 个答案:

答案 0 :(得分:0)

我认为问题可能出在以下方面:

  • manyData中查询B时,将按date进行过滤。
  • 但是,当您更新Data中的C对象时,date字段是 没有设置。这导致date字段被更新为null
  • 当您返回B并过滤currentDate时,已更新 找不到Data个对象,因为其date字段为null

据我所知,您不能仅更新某些字段并保持其余字段不变。每个字段都会更新,包括null的字段(因为这可能是您要更新的期望值)。

我认为实现此目标的唯一方法是从Json更新,您可以在其中专门删除某些字段,而不是将它们设置为null

相关问题