gpt4 book ai didi

android - copyToRealmOrUpdate 删除了 RealmResults 中的更新对象

转载 作者:行者123 更新时间:2023-11-29 23:32:18 25 4
gpt4 key购买 nike

我刚刚了解了 Realm ,然后我想到了一些奇怪的事情。我有 3 个 Activity ,我们称之为 A、B 和 C。

在 Activity A(主屏幕)中,我调用了一项服务以从互联网下载数据并将其存储在 Realm 中。

在 Activity 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();

在 Activity C(插入/更新屏幕)中,我尝试插入或更新数据

首先,从 Activity A 和 B 来看,没有任何问题。 recyclerview 按我的预期显示数据。然后在我更新 Activity 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();

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

最佳答案

我假设问题可能出在以下方面:

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

据我所知,您不能只更新某些字段而保持其余字段不变。每个字段都将被更新,包括那些 null 的字段(因为这可能是您想要更新的所需值)。

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

关于android - copyToRealmOrUpdate 删除了 RealmResults 中的更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com