使用RxJava的Android室处理空的查询结果
尝试使用RxJava适配器测试新的Android Room Librarty。 我想处理结果,如果我的查询从DB返回0对象:
所以这里是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) })
我的数据库是空的,所以我期望.switchIfEmty()工作,但没有任何处理方法正在发射。 .subscribe()和.switchIfEmpty()
Db Flowables是可观察的(所以如果数据库发生变化,它们会一直调度),所以它永远不会完成。 您可以尝试返回List<AuthResponse>
。 我们考虑过移植一个可选项,但决定不这样做,至少现在是这样。 相反,我们可能会在不同的已知库中添加对可选的支持。
switchIfEmpty
作为参数Publisher<AuthResponse>
。 通过SAM转换你的匿名函数变成这个类。 但是,它不符合预期从Publisher
的行为,因此它不会按预期工作。
用一个像Flowable.empty().doOnSubscribe { Log.d(TAG, "IS EMPTY") }
这样的正确实现替换它Flowable.empty().doOnSubscribe { Log.d(TAG, "IS EMPTY") }
它应该可以工作。
在版本1.0.0-alpha5中,room增加了对Maybe
和Single
支持,所以现在你可以写类似的东西了
@Query("SELECT * FROM auth_info") fun getAuthInfo(): Maybe<AuthResponse>
你可以在这里阅读更多
- Kotlin和Android lint检查
- Kotlin和Android数据绑定(BuildTools 2.0.0)
- 图像视图不会出现在Activity上(在AppCompatActivity上可以)
- TaskStackBuilder addParentStack()方法不起作用
- Android Studio,Kotlin:上传图片并显示
- 为什么Kotlin在主构造函数中不允许任何代码?
- 如何使用Anko DSL设置NavigationView的headerView?
- 使用kapt时,Realm在Java / Kotlin项目中不生成RealmProxy类
- 无法获取Meetup API访问令牌与改造 – Android