Not Receiving Object Updates
rhysll34 opened this issue · 2 comments
rhysll34 commented
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?
Always
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