-
Type: Bug
-
Resolution: Unresolved
-
Priority: Minor - P4
-
None
-
Affects Version/s: None
-
Component/s: None
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