【发布时间】:2018-03-09 05:19:24
【问题描述】:
我正在学习 RxJava2,我需要链接三个 observable:
第一个对数据进行操作:
Completable performOperations(Data data); // performs expensive operations.
第二个将数据上传到服务器1并发出百分比进度。
Observable<Integer> uploadToServer1(Data data); // while it performs the upload, it calls several times onNext(progress) and finally calls onComplete().
第三个只是通知服务器2上传完成。
Completable informUploadedToServer2(Data data); // just calls a REST API.
我想在我的 Activity 中显示第二个 observable 的进度,并最终在第三个 observable 成功完成时显示成功。如果三个 observable 中的任何一个抛出异常,我也应该在 Activity 中显示错误。
我尝试使用 concat 进行链接,但它不会编译,因为 uploadToServer1 发出 Integer 类型,而其余的则不会。
public void upload(Data data, MyCallback callback) {
Observable.concat(performOperations(data).toObservable(), uploadToServer1(data), informUploadedToServer2(data))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<Integer>() {
@Override
public void onNext(Integer integer) {
callback.onProgressChanged(integer);
}
@Override
public void onError(Throwable e) {
callback.onError();
}
@Override
public void onComplete() {
callback.onSuccess();
}
});
}
我已经看到了,如果我改成
Observable.concat(performOperations(data).<Integer>toObservable(), uploadToServer1(data), informUploadedToServer2(data).<Integer>toObservable())
它会起作用,但是,这是推荐的方法吗?
此外,如果第一个 observable 发出非整数怎么办?例如,DataDiff 对象将描述执行特定操作后的修改:
Observable<DataDiff> performOperations(Data data);
我应该如何订阅,以便我可以收听onNext(Integer) 和onNext(DataDiff),以便活动可以相应地更新视图?
谢谢。
【问题讨论】: