我试图从官方文档中的Notifications部分了解Realm中的通知类型,当我在多个托管对象中使用RealmObject addChangeListener时,只有一个对象在更改时才会调用它们。
这是我的代码
Person first = realm.where(Person.class).equalTo("id", 0).findFirst();
first.addChangeListener(new RealmChangeListener<Person>() {
@Override
public void onChange(Person person) {
Log.e(LOG_TAG, "First element is changing: " + person);
}
});
Person second = realm.where(Person.class).equalTo("id", 1).findFirst();
second.addChangeListener(new RealmChangeListener<Person>() {
@Override
public void onChange(Person person) {
Log.e(LOG_TAG, "Second person is changing: " + person);
}
});
当我在任何这些Person对象中触发更新时(例如在第一个中),都会调用两个侦听器。
这是官方文件说的:
还可以将侦听器附加到RealmObject实例以及RealmResults实例。这允许您对对象和查询结果的更改做出反应。
并且
最后,基于类型的更改侦听器将在其引用类型发生更改时收到通知。
根据我的理解,所看到的行为与第二个定义一致,但是我需要使用第一个行为,我希望在对应于该侦听器的对象发生更改时得到通知。 因此,如果更新第一个Person,则只通知其相应的侦听器,而不是所有Person侦听器。
答案 0 :(得分:2)
现在它正在发生,因为我们的变化检测不够精细。它将触发相同类型的所有对象的更改侦听器,而不仅仅是那些已更改的对象。
在此处https://github.com/realm/realm-java/issues/989跟踪更改侦查器仅通知确切对象是否已更改。
答案 1 :(得分:1)
答案 2 :(得分:0)
使用findFirstAsync()返回一个空的无效的realmModel。这是您使用addChangeListener()
获取更新的方法