Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Realm DB Realm.asObservable()发出两次结果_Android_Database_Realm_Rx Java - Fatal编程技术网

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

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

我的应用程序使用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();
    }
}

这是出于设计,因为如果您订阅了占位符对象,领域会立即发出占位符对象。如果你只对第一个“真实”结果感兴趣,你可以这样做:

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(...)