android - Realm: Why on Devices/Emulators method RealmChangeListener.onChange() NOT call every times? -


realm 3.5.0

android application.

my snippet:

public class mainapp extends multidexapplication implements realmchangelistener<realmresults<permissionofferresponse>> {      private void loginandconfig() {         string authurl = "http://" + buildconfig.object_server_ip + ":" + buildconfig.object_server_port + "/auth";          syncuser.callback callback = new syncuser.callback() {             @override             public void onsuccess(syncuser user) {                   syncuser = user;                   createpermissionofferandsyncwithros();             }              @override             public void onerror(objectservererror error) {                 string errormsg;                 switch (error.geterrorcode()) {                     case unknown_account:                         errormsg = "account not exists.";                         break;                     case invalid_credentials:                         errormsg = "user name , password not match";                         break;                     default:                         errormsg = error.tostring();                 }                 log.w(tag, "loginandconfig: onerror: result errormsg = " + errormsg);             }         };          synccredentials synccredentials = synccredentials.usernamepassword(                 buildconfig.user_name, buildconfig.password, false);         syncuser.loginasync(synccredentials, authurl, callback);     }      private void createpermissionofferandsyncwithros() {         realm managementrealm = syncuser.getmanagementrealm();         string offertoken = buildconfig.realm_offer_token;         final permissionofferresponse newpermissionofferresponse = new permissionofferresponse(offertoken);         managementrealm.executetransaction(new realm.transaction() {             @override             public void execute(realm realm) {                 realm.insert(newpermissionofferresponse);             }         });          realmresults<permissionofferresponse> realmresultpermissionofferresponse = managementrealm.where(permissionofferresponse.class)                 .equalto("id", newpermissionofferresponse.getid())                 .equalto("statuscode", 0) // status > 0 error                 .findall();         realmresultpermissionofferresponse.addchangelistener(this);     }      @override     public void onchange(realmresults<permissionofferresponse> permissionofferresponse) {         permissionofferresponse permissionofferresponse = permissionofferresponse.first();         realmurl = permissionofferresponse.getrealmurl();     } } 

my steps:

  1. start android application
  2. check method realmchangelistener.onchange() call
  3. uninstall android app

i repeat 3 steps 10 times.

results on different android configurations:

****************************************************** emulator: android 4.0.3, ram 512 mb, vm heap 48 mb method realmchangelistener.onchange() call 10 times.  ****************************************************** device: android 4.3, ram 700 mb method realmchangelistener.onchange() call 7 times.  ****************************************************** emulator: android 6.0, ram 512 mb, vm heap 48 mb method realmchangelistener.onchange() call 7 times.  ****************************************************** emulator: android 6.0, ram 1 gb, vm heap 48 mb method realmchangelistener.onchange() call 5 times.  ****************************************************** device: android 6.0, ram 2 gb method realmchangelistener.onchange() call 10 times. 

questions:

  1. why on devices/emulators method realmchangelistener.onchange() not call 10 times?
  2. how can fix this?

thanks.

the following could work:

    private set<realmchangelistener<realmresults<permissionofferresponse>> changelisteners = new hashset<>();      private void createpermissionofferandsyncwithros() {         realm managementrealm = syncuser.getmanagementrealm();         string offertoken = buildconfig.realm_offer_token;         final permissionofferresponse newpermissionofferresponse = new permissionofferresponse(offertoken);         managementrealm.executetransaction(new realm.transaction() {             @override             public void execute(realm realm) {                 realm.insert(newpermissionofferresponse);             }         });          realmresults<permissionofferresponse> realmresultpermissionofferresponse = managementrealm.where(permissionofferresponse.class)                 .equalto("id", newpermissionofferresponse.getid())                 .equalto("statuscode", 0) // status > 0 error                 .findall();          class _realmchangelistener implements realmchangelistener<realmresults<permissionofferresponse>> {             private realmresults<permissionofferresponse> results;              public _realmchangelistener(realmresults<permissionofferresponse> results) {                 this.results = results;                 changelisteners.add(this);                 results.addchangelistener(this);             }              @override             public void onchange(realmresults<permissionofferresponse> element) {                 changelisteners.remove(this);                  mainapp.this.onchange(element);             }         }         new _realmchangelistener(realmresultpermissionofferresponse);     }      public void onchange(realmresults<permissionofferresponse> permissionofferresponse) {         permissionofferresponse permissionofferresponse = permissionofferresponse.first();         realmurl = permissionofferresponse.getrealmurl();     } } 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -