2017-05-27 115 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