I am using Realm 3.5.0
I've added ChangeListener to RealmResults. Sometimes it stops working after few changes in RealmResults(like creation or removal object) and sometimes it takes some time to stop. I am using firebase to update realm database.
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);
}
}
});
}
This is how i delete object with dialog
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();
}
});
And the way how i add new items through dialog
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);
}
});
I cannot find a solution to this problem on the internet. Thanks for the help in advance :)
Realm keeps a weak reference to your RealmResults for notifying it, so if you don't store it as a field variable, then it'll get garbage collected and will no longer be notified.
RealmResults<Prize> resPrizeListner = realm.where(Prize.class).equalTo("person", personPrize).findAll();
Needs to be
RealmResults<Prize> prize;
public void blah() {
prize = realm.where(...).findAll();
prize.addChangeListener(...)