Uploaded image for project: 'Realm Java SDK'
  1. Realm Java SDK
  2. RJAVA-1242

Not Receiving Object Updates

      How frequently does the bug occur?

      Sometimes

      Description

      When updating a field in an object I expect that a Flowable taken from the results of a query that returns that object will emit the changed object. In practice nothing is emitted.

      When using the debugger, I can see the proxy being updated and the calls to the native functions. I cannot see anything coming back out of the native functions.

      Stacktrace & log output

      No response

      Can you reproduce the bug?

      Sometimes - seems intermittent with no discernible pattern

      Reproduction Steps

      Realm Initialisation:

      RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
      	.schemaVersion(11)
      	.migration(new MyRealmMigration())
      	.allowWritesOnUiThread(true)
      	.rxFactory(new RealmObservableFactory(false))
      	.build();
      Realm.setDefaultConfiguration(realmConfiguration);
      

      Query and flowable retrieval where visitId is a primary for the Visit class:

      Visit visit = realm.where(Visit.class)
                      .equalTo(key visitId).findFirstAsync();
      
      Disposable subscription = visit.asFlowable() // No further emissions after initial result even if data is changed elsewhere
                  .filter(realmObject -> realmObject.isLoaded() && realmObject.isValid())
                  .firstElement()
                  .flatMap(realmObject -> {
                      Visit theVisit = (Visit) realmObject;
                      listener.setVisit(theVisit);
                      UIVisitData uiVisitData = getUiVisitFromVisit(theVisit, listener);
                      return Maybe.just(uiVisitData);
                  }).observeOn(AndroidSchedulers.mainThread())
                  .subscribe(listener);
              listener.setObservableSubscription(subscription);
      

      The proxy for Visit:

      public void realmSet$visitStatus(String value) {
          if (proxyState.isUnderConstruction()) {
              if (!proxyState.getAcceptDefaultValue$realm()) {
                  return;
              }
              final Row row = proxyState.getRow$realm();
              if (value == null) {
                  row.getTable().setNull(columnInfo.visitStatusColKey, row.getObjectKey(), true);
                  return;
              }
              row.getTable().setString(columnInfo.visitStatusColKey, row.getObjectKey(), value, true);
              return;
          }
      
          proxyState.getRealm$realm().checkIfValid();
          if (value == null) {
              proxyState.getRow$realm().setNull(columnInfo.visitStatusColKey);
              return;
          }
          proxyState.getRow$realm().setString(columnInfo.visitStatusColKey, value);
      }
      

      Version

      10.16.1

      What Atlas App Services are you using?

      Local Database only

      Are you using encryption?

      No

      Platform OS and version(s)

      Android 13, possiblyothers

      Build environment

      Android Studio version: Hedgehog, but also older version
      Android Build Tools version: 34
      Gradle version: 8.0

            Assignee:
            Unassigned Unassigned
            Reporter:
            unitosyncbot Unito Sync Bot
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: