Single 中 DB 操作的返回值<Long>

问题描述 投票:0回答:0

我在我的数据库(房间)中添加一条记录,它返回插入记录的 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()
之类的东西替换它。我确实已经尝试过这个并且遇到了类似的问题,代码在第一个块之后停止执行,就像它没有被订阅一样。

有人可以帮我吗? 谢谢

android rx-java rx-java2
© www.soinside.com 2019 - 2024. All rights reserved.