在RxJava,如何重试/恢复,而不是在完成观察到的错误, [英] In RxJava, how to retry/resume on error, instead of completing the observable

查看:393
本文介绍了在RxJava,如何重试/恢复,而不是在完成观察到的错误,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现的是:


  • 显示器preferences一定变化

  • 当检测到变化时,使用新的价值开始新的网络呼叫

  • 变换结果

  • 的显示效果在用户界面

我知道什么时候会发生变化,现在我presume我需要调用onNext一个主题。这样,就可以触发一个接收链,并在结束时,我可以更新UI。

I know when the change happens, now I presume I need to call onNext on a Subject. This should then trigger a Rx chain, and in the end I can update the 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()不会导致另一个网络呼叫的情况

But in the case of the network call failing, the observable errors, and calling onNext() does not result in another network call.

所以我的问题是,应该怎么处理呢?我怎样才能保持它的完整观测,所以我可以随便扔另一个值?我能想到的例子,只是想忽略发生错误的事实,一个简单的重试按钮。

So my question is, how should I handle this? How can I keep the Observable intact so I can just throw another value at it? I can imagine for example a simple retry button that just wants to ignore the fact that an error occurred.

推荐答案

您不必处理错误与 mViewPeriodSubject 而是,对付你的改造错误观察到。这种改造观测将不会恢复,但至少,它不会影响你的主观察到。

You don't have to deal error with your mViewPeriodSubject but instead, deal with errors on your retrofit Observable. This retrofit Observable won't resume, but at least, it won't affect your "main" 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,如何重试/恢复,而不是在完成观察到的错误,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆