我在我的应用程序中使用RxJava和Realm DB。当我查询领域中的数据并调用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();
}
}日志:
TEST: Realm emits group result, size 0
TEST: Realm emits group result, size 1发布于 2016-02-01 19:08:31
这是设计好的,因为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(...)从当前的文档中还不清楚这一点,但我们正在更新JavaDoc以更好地解释这一点:https://github.com/realm/realm-java/pull/2201
https://stackoverflow.com/questions/35127841
复制相似问题