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()
我的问题是大多数时候getNotifications
没有被调用。有时它有时会连续几次,然后它不再被调用(除了刷新我的网页以发送消息给GCM之外什么都没做)。通知很好地存储在数据库中,如果我再次呼叫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;
}
,我会全部看到它们。
我今天早上从领域开始,所以如果你有关于如何组织我的“领域”代码的建议,我会感到高兴。
pin.onkeypress = function (e) {
return e.charCode >= 48 && e.charCode <= 57;
};
答案 0 :(得分:2)
根据你的描述,很难给出具体的建议,但有几点建议:
更改侦听器仅在Looper事件上触发。因此,如果您在处理事件时有多次写入。它只会触发一次onChange
来电。
关闭领域意味着不再会触发更改侦听器。
Changelisteners不适用于普通对象。