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)
这是设计,因为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