让我描述一下我的情况:
- 我想通过 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/