我想要实现的目标是:
我知道当发生变化时,现在我假设我需要在主题上调用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完好无损,这样我就可以为它抛出另一个值?我可以想象一个简单的重试按钮,它只是想忽略发生错误的事实。
答案 0 :(得分:7)
您不必与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));