代码之家  ›  专栏  ›  技术社区  ›  Frandall

copyToRealmOrUpdate删除了RealmResults中的更新对象

  •  1
  • Frandall  · 技术社区  · 6 年前

    我刚刚了解了王国,我突然想到一些奇怪的事情。我有3个活动,我们称之为A,B和C。

    在活动A(主屏幕)中,我调用服务从internet下载数据并将其存储在领域中。

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   James Abuser    6 年前

    我认为问题可能是:

    • manyData 在里面 B date .
    • 但是,当您更新 Data C ,的 日期 未设置。这将导致 日期 正在更新到的字段 null
    • B类 和过滤器 currentDate ,更新的 数据 日期 无效的 .

    无效的 .