android - 如何使用RxJava等待两个Retrofit请求列表结束

标签 android rx-java retrofit2

让我描述一下我的情况:

  • 我想通过 API 注册新记录。
  • 我想通过 API 更新一些记录。
  • 我需要在所有这些请求完成后收到通知,才能开始另一项任务。

具体来说,我有两个 ArrayList:

ArrayList<Report> createdReports = myHelper.getOfflineCreatedReports();
ArrayList<Report> editedReports = myHelper.getOfflineEditedReports();

每个报告都可以使用方法从我的 ApiService(Retrofit 实现)中获取 Observable 实例。

        Observable<NewReportResponse> createdReportsObs = Observable.from(createdReports) // .just() != .from()
            .flatMap(new Func1<Report, Observable<NewReportResponse>>() {
                @Override
                public Observable<NewReportResponse> call(Report report) {
                    return report.postToServer();
                }
            });

    Observable<NewReportResponse> editedReportsObs = Observable.from(editedReports)
            .flatMap(new Func1<Report, Observable<NewReportResponse>>() {
                @Override
                public Observable<NewReportResponse> call(Report report) {
                    return report.updateInServer();
                }
            });

我正在使用 flatMap 运算符为每个报告获取一个 Observable。

但我不确定如何等到所有请求都完成。

我在考虑使用 zip 运算符。

Observable.zip(createdReportsObs, editedReportsObs, new Func2<NewReportResponse, NewReportResponse, Boolean>() {
        @Override
        public Boolean call(NewReportResponse justOneResponse, NewReportResponse justOneResponse2) {
            return false;
        }
    });

不幸的是,我看到了一些示例,其中 zip 用于创建 Observable 对。

请建议我可以使用什么运算符来实现它。或者如何通过不同的方法使用 rxJava 来做到这一点。

提前谢谢你。

最佳答案

你在使用 RxJava 2 吗?如果是这样,您可以使用新的可完成 api。这是假设您不需要知道任何服务器结果,只需等待它们完成即可。

Completeable.merge(createdReportsObs.toCompleteable(),
                   editedReportsObs.toCompleteable())
            .subscribe()

关于android - 如何使用RxJava等待两个Retrofit请求列表结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44081726/

相关文章:

android - 如何翻译字符串数组中的项目?

java - 暂停 Android 应用程序,直到提供输入

android - 无法在 android studio 中加载自定义 Gradle 插件的类

java - RxJava map() 在赋值时返回值吗?

java - 从 RxJava 编译示例时找不到 org.reactivestreams.Publisher 的类文件?

retrofit - 将 RxJava observable 的错误转换为另一个 observable 并吞下成功

java - 使用 Retrofit2 在 Recycleview 中得到空响应?

java - 有效证书上的 SSL 连接错误

java - 如何让 Android 按钮阵列的 onClickListener 正常工作

java - 使用改造过帐值