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

标签 android rx-java rx-java2

我对如何在 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 值来实现此目的(如果数据库为空,truefalse 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/

相关文章:

android - 如何忽略错误并继续无限流?

java - RxJava 2 发生错误后如何继续处理?

java - Rxjava - 可观察序列中元素的分组/批量突发

android - 从数据库+网络加载数据(Room + Retrofit + RxJava2)

java - Android 强制关闭 JodaTime

android - react native 选择器未在 android 中显示

Android 主题实现最简单的问题 : custom per theme color

安卓错误 : failed to find target with hash string android-26 and similar

java - RxJava 在可连接的 observable 上重新连接不起作用

android - MVP模式下如何在Presenter中访问指定的 View 组件?