【问题标题】:Retrofit2 parallel response handling with observablesRetrofit2 并行响应处理与 observables
【发布时间】:2018-04-01 10:07:59
【问题描述】:
我正在开发一个用户可以在注册后编辑他/她的个人资料的应用。问题是编辑配置文件使用对后端的多个 API 调用。一个用于编辑电子邮件,一个用于编辑密码等等。我将retrofit2 与RxJava 结合使用,因此调用是Observables/Singles。当用户按下编辑按钮并且调用在不同的线程上执行时,会显示一个微调器。如果并行执行成功/失败,我该如何处理?用户需要知道编辑是否成功,并在调用完成时隐藏微调器。我不能使用 combineLatest,因为用户可能会选择只更改他们的电子邮件或个人资料图片或姓名,因此只会调用那些而不是全部。
【问题讨论】:
标签:
android
rx-java
retrofit2
rx-android
【解决方案1】:
我不能使用 combineLatest,因为用户可能会选择仅更改
他们的电子邮件或个人资料图片或姓名,因此只有那些会被调用
而不是全部
也许您可以伪造 API 调用。
Observable.zip(
pictureObservable.flatmap(picture -> {
if (picture.isNotChanged) return Observable.just(API.SUCCESS);
else return api.editObservable(picture);
},
emailObservable.flatmap(email -> {
if (email.isNotChanged) return Observable.just(API.SUCCESS);
else return api.editObservable(email);
}, (pictureApiResponse, emailApiResponse) -> apiResponse));
【解决方案2】:
使用 .flatMap() 或其他方法将所有调用合并到一个 observable 中,并在 .doOnSubcribe() 中打开/关闭微调器 on 和 .doAfterTerminate() off 的组合 observable。