Realm Change Listenere停止工作

时间:2017-12-11 12:13:51

标签: java android realm

我正在使用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);
                            }
                        });

我无法在互联网上找到解决此问题的方法。感谢您的帮助:)

1 个答案:

答案 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(...)