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)

Most upvoted comments

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)