gpt4 book ai didi

android - Rxjava while循环获取数据库对象并上传到服务器

转载 作者:搜寻专家 更新时间:2023-11-01 09:20:02 30 4
gpt4 key购买 nike

我对如何在 RxJava 中实现它感到困惑。我愿意

  1. 从我的数据库中取出一个对象
  2. 上传
  3. 从数据库中删除
  4. 从数据库中取出下一项并重复 2 和 3
  5. 当数据库没有剩余对象时完成

我知道如何通过首先从数据库加载所有对象并创建一个像这样的 Observable.fromIterable(allMyDbObjects)Observable 来做到这一点,但是我想一次取一个对象,以防数据库在我上传时更新。我不知道该怎么做。我看过 repeatUntil 但它似乎只是立即重复。这是我在想什么的伪代码:

getFirstDbObject()
.flatMapCompletable { obj ->
upload(obj)
.doOnComplete {
deleteFromDb(obj)
}
}
.repeatUntil {
// dbIsEmptyLogic.
// This doesn't work. I need to somehow call getFirstDbObject() again
}

有人能帮忙吗?

最佳答案

假设 getFirstDbObject() 返回一个 Maybe,您可以通过将结果映射到 bool 值(true 如果数据库为空,false 如果没有)然后重复序列直到 getFirstDbObject() 返回空并且流完成。

getFirstDbObject()
.toObservable()
.flatMapSingle { obj ->
upload(obj)
.doOnComplete { deleteFromDb(obj) } // probably better to use .andThen(deleteFromDb(obj)) if delete also returns a completable
.toSingleDefault(false)
}
.defaultIfEmpty(true)
.repeat()
.takeUntil { isComplete ->
isComplete
}

关于android - Rxjava while循环获取数据库对象并上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56879412/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com