2017-05-27 117 views
3

嘗試使用RxJava適配器測試新的Android Room空間。我想處理的結果,如果我的查詢返回從DB 0對象:Android RxJava空間查詢結果爲空

因此,這裏是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是空的,所以我期望.switchIfEmty()工作,但沒有任何處理方法正在解僱。 .subscribe()和.switchIfEmpty()

回答

4

Db Flowables是可觀察的(所以它們在數據庫更改時保持調度),所以它永遠不會完成。您可以嘗試返回List<AuthResponse>。我們考慮過移植一個可選項,但決定不這樣做,至少現在是這樣。相反,我們可能會在不同的已知庫中添加對Optional的支持。

+1

你應該考慮的此功能的替代行爲。當請求的結果爲空時,我想獲得Flowable.empty()。 – 0wl

+1

我們將添加對'Maybe'的支持。 https://issuetracker.google.com/issues/62231019 – yigit

+0

哦,非常感謝你! – 0wl

0

switchIfEmpty作爲參數a Publisher<AuthResponse>。通過SAM轉換你的匿名函數變成了這個類。但它不符合Publisher預期的行爲,因此無法按預期工作。

用正確的實現替換它,如Flowable.empty().doOnSubscribe { Log.d(TAG, "IS EMPTY") },它應該工作。

2

在版本1.0.0-ALPHA5,房間增加了支持的MaybeSingle到DAO的,所以現在你可以寫類似

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

你可以閱讀更多關於它here