我正在使用Realm 3.5.0
我已将ChangeListener添加到RealmResults。有时它在RealmResults中进行少量更改后停止工作(如创建或删除对象),有时需要一些时间才能停止。我正在使用firebase来更新领域数据库。
RealmResults<Prize> resPrizeListner = realm.where(Prize.class).equalTo("person", personPrize).findAll();
if (personPrize.equals(user.getUid())) {
resPrizeListner.addChangeListener(new RealmChangeListener<RealmResults<Prize>>() {
@Override
public void onChange(RealmResults<Prize> prizes) {
if (prizes.size() == 0) {
queryPrize = realm.where(Prize.class).equalTo("id", 0);
setAdapterPrizes(queryPrize);
} else if (prizes.size() > 0) {
queryPrize = realm.where(Prize.class).equalTo("person", personPrize);
setAdapterPrizes(queryPrize);
}
}
});
}
这就是我用对话框
删除对象的方法final RealmResults<Prize> resPrizeDelete = realm.where(Prize.class)
.equalTo("id", id)
.findAll();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Prize deletePrize = resPrizeDelete.get(0);
deletePrize.deleteFromRealm();
}
});
我通过对话框添加新项目的方式
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Prize prize = new Prize();
prize.setId(System.currentTimeMillis());
prize.setPerson(user.getUid());
...
realm.copyToRealmOrUpdate(prize);
}
});
我无法在互联网上找到解决此问题的方法。感谢您的帮助:)
答案 0 :(得分:1)
Realm为您的RealmResults保留一个弱引用以通知它,因此如果您不将其存储为字段变量,那么它将被垃圾收集并且将不再被通知。 / p>
RealmResults<Prize> resPrizeListner = realm.where(Prize.class).equalTo("person", personPrize).findAll();
需要
RealmResults<Prize> prize;
public void blah() {
prize = realm.where(...).findAll();
prize.addChangeListener(...)