我刚刚了解了领域,并且发生了一些奇怪的事情。我有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个元素。有人可以给我一些指导吗?
答案 0 :(得分:0)
我认为问题可能出在以下方面:
manyData
中查询B
时,将按date
进行过滤。Data
中的C
对象时,date
字段是
没有设置。这导致date
字段被更新为null
。B
并过滤currentDate
时,已更新
找不到Data
个对象,因为其date
字段为null
。据我所知,您不能仅更新某些字段并保持其余字段不变。每个字段都会更新,包括null
的字段(因为这可能是您要更新的期望值)。
我认为实现此目标的唯一方法是从Json更新,您可以在其中专门删除某些字段,而不是将它们设置为null
。