【发布时间】:2017-05-20 17:15:17
【问题描述】:
首先,让我描述一下我的情况:
- 我想通过 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。
提前谢谢你。
【问题讨论】: