我对如何在 RxJava 中实现这一点感到困惑。 我愿意
- 从我的数据库中获取一个对象
- 上传
- 从数据库中删除它
- 从数据库中获取下一项并重复 2 和 3
- 当数据库没有剩余对象时完成
我知道如何通过首先从数据库加载所有对象并创建像 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
code> 如果不是),然后重复该序列,直到 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/