2016-05-05 6 views
0

asObservable()を呼び出してレルムオブザーバブルを使用する場合、amb()またはswitchIfEmpty()でレルムの観測可能なシーケンスが終了しません。この問題を回避するには、Realms asObservable()の代わりにObservable.just()を使用します。レルムrx-java amb()またはswitchIfEmpty()を使用しているときに観測が終了しない

私のコードや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); 
       } 
      }); 
} 
+0

findAllAsync()。asObservable()を使用していますか? – JohnWowUs

+0

いいえ、コードスニペットが示すように、私はfindAll()。asObservable()を使用します。 – Eitan

答えて

0

RealmResultsにasObservable()を呼び出すことによって作成され、観察は、(onCompleteのを呼び出す)に終了することはありません。ドキュメントhereを参照してください。

関連する問題