RealmChangeListener
没有按我的预期工作,下面是我对它的处理方法:
public ArrayList<NotificationMessage> getNotifications(RealmChangeListener<RealmResults<NotificationMessage>> listener) {
RealmResults<NotificationMessage> results = realm.where(NotificationMessage.class).findAll();
results.addChangeListener(listener);
return (ArrayList) realm.copyFromRealm(results);
}
public void addNotification(NotificationMessage notif) {
realm.beginTransaction();
realm.copyToRealm(notif);
realm.commitTransaction();
}
基本上我使用realm来存储gcm消息。我的
GCMListenerService
在他收到通知时调用addNotification()
,我有一个片段显示这些通知,这些通知在创建时调用getNotifications(this)
。它实现RealmChangeListener<RealmResults<NotificationMessage>>
:@Override
public void onChange(RealmResults<NotificationMessage> element) {
RecyclerAdapter.refreshDataSet(Realm.getDefaultInstance().copyFromRealm(element));
}
我的问题是大部分时间都不调用
onChange()
。有时是,有时是连续几次,然后不再调用它(除了刷新发送消息给gcm的web页面之外什么都不做)。通知很好地存储在数据库中,如果我再次调用getNotifications
我将看到它们。我今天早上从realm开始,所以如果你对我应该如何组织我的“realm”代码有建议,我会通知你的。
public static <T extends RealmObject> ArrayList<T> convertRealmToPlainObject(RealmResults<T> results) {
ArrayList<T> returnedData = new ArrayList<>();
Iterator<T> it = results.iterator();
while (it.hasNext()) {
returnedData.add(it.next());
}
return returnedData;
}
最佳答案
从你的描述中很难给出具体的建议,但有几点:
更改侦听器仅在循环器事件上触发。因此,如果在处理事件时有多个写操作。它只会触发一个onChange
调用。
关闭域意味着不再触发更改侦听器。
ChangeListeners不适用于普通对象。
关于android - Realm的RealmChangeListener具有我不了解的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37166296/