如何在Android Room Library中使用RxJava?

时间:2019-09-10 08:50:22

标签: android rx-java android-room

我正在Adnroid的{​​{1}} RxJava开发中。

我使用改造来调用API并更新数据库中的值,如以下代码所示:

Room

当响应是来自API的 override fun certifyMail(userInfo: Userinfo): Observable<Int> { return securityApi.certifyUserInfo(userInfo) .map { //return Observable<Status> here when(it.status){ "OK" -> { it } else -> { throw Exception(it.msg!!) } } } .flatMap { userInfoDataSource.updateUserCertifyMailInfo(userInfo.account,1) //How to convert the return type to Observable<Int> from Int. } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) } 时,我将如下更新数据库中的值。

OK

但是数据库的返回类型为@Query("UPDATE certify_info SET value = :value WHERE account = :account") fun updateCertifyMailConfirm(account:String,value: Int):Int 。 如何将其隐藏到Int

谢谢。

1 个答案:

答案 0 :(得分:0)

房间库可以返回RxJava的类型。

// In the component you are having trouble : constructor(private readonly activatedRoute: ActivatedRoute) {} // Then, debug or log(activatedRoute) 库添加到您的项目

请查看此great article,以便更好地理解。

也结帐Google official sample about this

只需使用以下其中一种方法来编辑implementation "androidx.room:room-rxjava2:2.2.0-rc01"方法(选择一种更适合的方法):

与Maybe一起

updateUserCertifyMailInfo

单身:

@Query("UPDATE certify_info SET value = :value  WHERE account = :account")
fun updateCertifyMailConfirm(account:String,value: Int):Maybe<Int>

可流动/可观察:

@Query("UPDATE certify_info SET value = :value  WHERE account = :account")
fun updateCertifyMailConfirm(account:String,value: Int):Single<Int>

重要!仔细阅读每种类型在房间查询中的行为