Realm-java: Realm Notifications does not work

Created on 28 Jan 2017  路  7Comments  路  Source: realm/realm-java

Goal

Real Time data updates

Expected Results

Events to be changed if the data was changed from Realm Browser

Actual Results

The data wasn't notified if i changed a value of an event in realm browser.The OnChange listener works if i listen like this realm.addChangeListener but doesn't work with Realm Results

Steps & Code to Reproduce

  1. Listen Realm Result on fragment onResume
  2. User Click the dialog to add Data
  3. Data got into the realm object server
  4. User Change value in realm object server

Code that listens

 realm.where(Event.class)
        .findAll()
        .addChangeListener(new RealmChangeListener<RealmResults<Event>>() {
          @Override public void onChange(RealmResults<Event> element) {
            Log.d("Data,","data changed");
          }
        });

Version of Realm and tooling

Realm version(s): 2.3.0

Realm sync feature enabled: yes

Android Studio version: 2.2

Which Android version and device: 6.0 / One plus 2

T-Help

Most helpful comment

Thanks its working now ..its because the RealmResults field

All 7 comments

findAll() is returning a RealmResults but my guess is that it is GC'ed and the listener is GC'ed too. Can you try to keep a strong reference to your RealmResults to prevent GC?

You need to retain a strong reference (typically a field reference) to your RealmResults

@Zhuinden Its still not working .the On change event was not fired.

@Zhuinden the example works ..its happening only in my app.The on change got triggered if i use like this
realm.addChangeListener(new RealmChangeListener() {
@Override public void onChange(Realm element) {

  }
});

but

if i tried to listen events it doesn't work anymore
RealmResults list = realm.where(Event.class).between("date", to, from).findAll();
list.addChangeListener(new RealmChangeListener>() {
@Override public void onChange(RealmResults element) {

  }
});

But the logs show REALM_JAVA D REALM_CHANGED : io.realm.HandlerController@183c023 REALM_JNI V --> Java_io_realm_internal_SharedRealm_nativeRefresh__J -894174520 V --> Java_io_realm_internal_SharedRealm_nativeGetVersion -894174520 V --> Java_io_realm_internal_SharedRealm_nativeIsClosed -894174520 V --> Java_io_realm_internal_SharedRealm_nativeIsClosed -894174520 V --> Java_io_realm_internal_SharedRealm_nativeIsClosed -894174520 V --> Java_io_realm_internal_SharedRealm_nativeIsClosed -894174520 V --> Java_io_realm_internal_SharedRealm_nativeIsClosed -894174520 V --> finalize_table -1011437056 V --> finalize_unchecked_row -1108875968 V --> finalize_unchecked_row -1070607824 V --> finalize_unchecked_row -1070606240

RealmResults list = realm.where(Event.class).between("date", to, from).findAll();

Make sure you have a RealmResults field

RealmResults list;

public void method() {
    list = realm.where(Event.class).between("date", to, from).findAll();
    list.addChangeListener(new RealmChangeListener<RealmResults>() {
         @Override public void onChange(RealmResults element) {

          }
     });
}

( are you sure between uses to, from? I think it's from, to)

Thanks its working now ..its because the RealmResults field

Was this page helpful?
0 / 5 - 0 ratings