在RxJava中,如何在出错时重试/恢复,而不是完成observable
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在RxJava中,如何在出错时重试/恢复,而不是完成observable,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1196字,纯文字阅读大概需要2分钟。
内容图文
![在RxJava中,如何在出错时重试/恢复,而不是完成observable](/upload/InfoBanner/zyjiaocheng/819/6e24cbdda8924ba1aeca9d2b0fe9f7df.jpg)
我想要实现的是:
>监控某个变化的偏好
>当检测到更改时,使用新值启动新的网络呼叫
>转换结果
>在UI中显示结果
我知道变化何时发生,现在我假设我需要在主题上调用onNext.然后应该触发一个Rx链,最后我可以更新UI.
mViewPeriodSubject = PublishSubject.create();
mAdapterObservable =
mViewPeriodSubject
.flatMap(period -> MyRetrofitAPI.getService().fetchData(period)) // this might fail
.flatMap(Observable::from)
.map(MyItem::modifyItem)
.toList()
.map(obj -> new MyAdapter(obj));
mViewPeriodSubject.onNext("week"); // this one starts the chain
mViewPeriodSubject.onNext("year"); // this one does not
但是在网络调用失败的情况下,可观察的错误和调用onNext()不会导致另一个网络调用.
所以我的问题是,我该如何处理?我怎样才能保持Observable完好无损,这样我就可以为它抛出另一个值?我可以想象一个简单的重试按钮,它只是想忽略发生错误的事实.
解决方法:
您不必在mViewPeriodSubject上处理错误,而是在改造Observable时处理错误.这个改造的Observable不会恢复,但至少,它不会影响你的“主要”Observable.
mAdapterObservable =
mViewPeriodSubject
.flatMap(period -> MyRetrofitAPI.getService().fetchData(period).onErrorResumeNext(e -> Observable.empty()) // this might fail
.flatMap(Observable::from)
.map(MyItem::modifyItem)
.toList()
.map(obj -> new MyAdapter(obj));
内容总结
以上是互联网集市为您收集整理的在RxJava中,如何在出错时重试/恢复,而不是完成observable全部内容,希望文章能够帮你解决在RxJava中,如何在出错时重试/恢复,而不是完成observable所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。