Realm DB Realm.asObservable()发出两次结果

xhi*_*ang 2 database android realm rx-java

我将RxJava和Realm DB用于我的应用程序.当我查询Realm中的数据并调用时Realm.asObservable(),RealmResult会发出2次.

public class JustTest extends Activity {
    private static final String TAG = "TEST";
    private Realm realm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        realm = Realm.getDefaultInstance();
        realm.where(Group.class).findAllAsync().asObservable()
                .subscribe(new Action1<RealmResults<Group>>() {
                    @Override
                    public void call(RealmResults<Group> groups) {
                        XLog.d(TAG, "Realm launch group result, size " + groups.size());
                    }
                });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        realm.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

日志:

TEST: Realm emits group result, size 0
TEST: Realm emits group result, size 1
Run Code Online (Sandbox Code Playgroud)

Chr*_*ior 5

这是设计,因为Realm会在订阅时立即发出占位符对象.如果您只对第一个"真实"结果感兴趣,可以执行以下操作:

realm.where(Foo.class).findAllAsync().asObservable()
  .filter(obj::isLoaded) // isLoaded is true when query is completed
  .first() // Only get the first result and then complete
  .subscribe(...)
Run Code Online (Sandbox Code Playgroud)

目前的文档并未立即明确这一点,但我们正在更新JavaDoc以更好地解释这一点:https://github.com/realm/realm-java/pull/2201