我在我的数据库(房间)中添加一条记录,它返回插入记录的 ID。例如,我添加一行并返回数字 5(这是一个 Long)。
当该操作完成后,我需要将该 ID 传递给另一个函数。当第二个功能完成时,我需要返回我从第 1 步获得的 ID。
我正在使用 RxJava 并且我正在订阅响应,因为我需要在完成后使用数据库记录 ID 执行另一个操作。
见下文:
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveUserData(date: UserDataDatabaseModel): Long
这将返回行 ID 的 Long。
我这样称呼它:
override fun submitUserData(): Single<Long> {
var rowId: Long = -1
return Completable.fromAction {
rowId = dao.saveUserData(getUserData())
}.andThen {
uploadUserData(rowId)
}.andThen(Single.just(rowId))
}
在呼叫点,我这样做:
submitUserData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError { throwable -> throwable.printStackTrace() }
.subscribe({ rowId ->
//handle rowId
},{
//handle error
})
我遇到的问题是代码永远不会返回到订阅。 如果我调试和使用 LogCat 等,那么我看到被调用代码的最后一个地方是在
.andThen(uploadUserData())
代码中。
所以我想我需要替换代码中的
Completable
部分,并用Single.create()
之类的东西替换它。我确实已经尝试过这个并且遇到了类似的问题,代码在第一个块之后停止执行,就像它没有被订阅一样。
有人可以帮我吗? 谢谢