【问题标题】:Realm Observable not finishing when using rx-java amb() or switchIfEmpty()使用 rx-java amb() 或 switchIfEmpty() 时,领域 Observable 未完成
【发布时间】:2016-05-05 07:49:46
【问题描述】:

当通过在查询上调用asObservable() 使用Realm Observable 时,使用amb()switchIfEmpty() 会导致领域的observable 无法完成其序列。可以通过使用 Observable.just() 而不是 Realms asObservable() 来解决此问题。

我不知道这是由我的代码还是 rx-java 或 Realm 中的错误引起的。

      mSubscription = getRealmObservable(params).switchIfEmpty(getNetworkObservable(params))
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(subscriber);

}

private Observable<model> getNetworkObservable(UrlParams params) {
    final api service = NetworkManager.getAPI();
    return service.getModel(params.toMap())
            .doOnNext(new Action1<RealmList<Model>>() {
                @Override
                public void call(RealmList<Model> models) {
                    if (models != null && models.size() > 0) {
                        mRealm.beginTransaction();
                        mRealm.copyToRealmOrUpdate(models);
                        mRealm.commitTransaction();
                    }
                }
            })
            .flatMap(new Func1<RealmList<Model>, Observable<Model>>() {
                @Override
                public Observable<Model> call(RealmList<Model> models) {
                    return Observable.from(models);
                }
            });
}

private Observable<Model> getRealmObservable(final UrlParams params) {

    return Observable.just(mRealm.where(Model.class).findAll())/*.asObservable()*/ <- Using this cause this sequence not to finish
            .filter(new Func1<RealmResults<Model>, Boolean>() {
                @Override
                public Boolean call(RealmResults<Model> models) {
                    return models != null && models.isValid() && models.size() > 0;
                }
            })
            .flatMap(new Func1<RealmResults<Model>, Observable<Model>>() {
                @Override
                public Observable<Model> call(RealmResults<Model> models) {
                    return Observable.from(models);
                }
            });
}

【问题讨论】:

  • 你在使用 findAllAsync().asObservable() 吗?
  • 不,正如代码 sn-p 所示,我使用 findAll().asObservable()

标签: android realm rx-java rx-android


【解决方案1】:

在 RealmResults 上调用 asObservable() 创建的 observable 永远不会终止(调用 onComplete)。请参阅文档here

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多