Android Realm DB Realm.asObservable()发出两次结果
我的应用程序使用RxJava和Realm DB。当我查询领域中的数据并调用Android Realm DB Realm.asObservable()发出两次结果,android,database,realm,rx-java,Android,Database,Realm,Rx Java,我的应用程序使用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 savedInstanceS
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();
}
}
这是出于设计,因为如果您订阅了占位符对象,领域会立即发出占位符对象。如果你只对第一个“真实”结果感兴趣,你可以这样做:
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以更好地解释这一点:我不能使用“first”,因为我在RxBinding中使用了它。在我的一些代码中,仍然存在bug。我不能使用“first”,因为我在RxBinding中使用了它。为什么不呢
realm.where(Group.class).findalsync().asObservable().filter(..).first().subscribe(…)
应该是完全可能的?或者您可以创建自己的RxObservableFactory
并在那里执行:我使用flatMap
将我的视图click
转换为RealmResult
,因此,当我首先使用时,我只能单击我的视图一次。.asObservable()。跳过(1)
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(...)