2017-05-27 11 views
3

RxJavaアダプターを使用して新しいAndroid Roomのライブラリアンを試そうとしています。だからここRxJavaのAndroidルームで空のクエリ結果を処理する

DAOのメソッドです:

@Query("SELECT * FROM auth_info") 
fun getAuthInfo(): Flowable<AuthResponse> 

そして、どのように私はそれを扱う:

 database.authDao().getAuthInfo() 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .switchIfEmpty { Log.d(TAG, "IS EMPTY") } 
      .firstOrError() 
      .subscribe(
        { authResponse -> Log.d(TAG, authResponse.token) }, 
        { error -> Log.d(TAG, error.message) }) 

私のDBが空である、と私は私のクエリはDBから0のオブジェクトを返す場合に生じる処理したいですしたがって、.switchIfEmty()が機能することを期待していますが、処理メソッドのどれもが起動していません。 .subscribe()も.switchIfEmpty()もありません

答えて

4

Db流動性は観察可能です(データベースが変更された場合でもディスパッチを継続します)ので、完了しません。 List<AuthResponse>を返すことができます。私たちは、オプションで移植することを検討しましたが、少なくとも今のところそれをしないことに決めました。代わりに、おそらく、別の既知のライブラリにOptionalのサポートを追加します。バージョン1.0.0-ALPHA5で

+1

あなたが考慮しなければならないの詳細を読むことができ

@Query("SELECT * FROM auth_info") fun getAuthInfo(): Maybe<AuthResponse> 

のようなものを書くことができ、MaybeとのDAOへSingleのサポートを追加しましたこの機能の代替動作。リクエストの結果が空の場合、Flowable.empty()を取得したい。 – 0wl

+1

私たちは 'たぶん'のサポートを追加します。 https://issuetracker.google.com/issues/62231019 – yigit

+0

ああ、ありがとうございます! – 0wl

0

switchIfEmptyは、パラメータとしてPublisher<AuthResponse>をとります。 SAM変換により、与えられた無名関数がこのクラスに変換されます。ただし、予想通り動作しないので、Publisherから予想される動作には従いません。

Flowable.empty().doOnSubscribe { Log.d(TAG, "IS EMPTY") }のような正しい実装で置き換えるとうまくいくはずです。

2

は、部屋は今、あなたはそれがhere

関連する問題