realm-java: findFirstAsync is not emitting object when queried object is deleted from Realm
Goal
Receive emitted object in following code when RealmObject is deleted from Realm.
realm.where(GitHubUserProfile.class)
.equalTo("login", login)
.findFirstAsync()
.asObservable()
Expected Results
Want to receive a callback when Queried RealmObject is deleted from Realm, just like we do when RealmObject gets modified. I am getting a callback when I use findAllAsync() even when object is deleted.
Actual Results
Not getting a callback when RealmObject is deleted from Realm.
Code Sample
/* Realm NOT emitting when I delete the queried object */
private void sampleQuery1(String login) {
realm.where(GitHubUserProfile.class)
.equalTo("login", login)
.findFirstAsync()
.asObservable()
.cast(GitHubUserProfile.class)
.filter(realmObject -> realmObject.isLoaded())
.filter(realmObject -> realmObject.isValid())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(gitHubUserProfile -> {
view.setData(gitHubUserProfile);
});
}
/* Realm emitting when I delete the queried object */
private void sampleQuery2(String login) {
realm.where(GitHubUserProfile.class)
.equalTo("login", login)
.findAllAsync()
.asObservable()
.cast(GitHubUserProfile.class)
.filter(realmObject -> realmObject.isLoaded())
.filter(realmObject -> realmObject.isValid())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(gitHubUserProfile -> {
view.setData(gitHubUserProfile);
});
}
public void clearGitHubUserProfileFromRealm(String login) {
GitHubUserProfile gitHubUserProfile = realm.where(GitHubUserProfile.class)
.equalTo("login", login)
.findFirst();
Realm realm = Realm.getDefaultInstance();
if (gitHubUserProfile != null) {
realm.executeTransaction(realm1 -> gitHubUserProfile.deleteFromRealm());
}
realm.close();
}
Version of Realm and tooling
Realm version(s): 1.1.0
Android Studio version: 2.1.2
Which Android version and device: 6.0.1, One plus One
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 19 (11 by maintainers)
Yes, which also why this is a breaking change
As @Zhuinden said, you can get it as a list (even using a query to an object) and if the list size is 0, the item doesn’t exits anymore.
You don’t have to iterate the list, you just define the query so that you obtain the results with one element (query by ID)