带有RxJava的Android Room处理空查询结果

Nik*_*sky 8 android kotlin rx-java2 android-room

尝试使用RxJava适配器测试新的Android Room librarty.如果我的查询从DB返回0个对象,我想处理结果:

所以这是DAO方法:

@Query("SELECT * FROM auth_info")
fun getAuthInfo(): Flowable<AuthResponse>
Run Code Online (Sandbox Code Playgroud)

以及我如何处理它:

        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) })
Run Code Online (Sandbox Code Playgroud)

我的数据库是空的,所以我希望.switchIfEmty()可以工作,但是处理方法都没有被触发.既没有.subscribe()也没有.switchIfEmpty()

yig*_*git 9

Db Flowables是可观察的(因此,如果数据库发生更改,它们将继续调度),因此它永远不会完成.你可以试试回来List<AuthResponse>.我们已经考虑过移植一个可选项,但决定不这样做,至少目前是这样.相反,我们可能会在不同的已知库中添加对Optional的支持.

  • 您应该考虑此功能的替代行为。当请求的结果为空时,我想获得 Flowable.empty()。 (2认同)

小智 7

在版本1.0.0-ALPHA5,房间增加了支持的MaybeSingle以DAO的,所以现在你可以写类似

@Query("SELECT * FROM auth_info")
fun getAuthInfo(): Maybe<AuthResponse>
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息