То, что я хочу достичь, это:В RxJava, как повторить/резюме по ошибке, вместо завершения наблюдаемой
- монитор предпочтения определенного изменения
- при обнаружении изменения, начать новую сеть вызовы с использованием нового значения
- преобразования результата
- отображение результата в интерфейсе
Я знаю, когда изменение происходит, теперь я полагаю, я необходимо вызвать onNext в теме. Затем это должно инициировать цепочку Rx, и в конце я могу обновить интерфейс.
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 неповрежденным, чтобы я мог просто выбросить в него другое значение? Я могу представить себе, например, простую кнопку повтора, которая просто хочет игнорировать тот факт, что произошла ошибка.
читать [это] (https://github.com/ReactiveX/RxJava/wiki/Error-Handling), я предполагаю раствор 3 или 4 применяется (проглотить ошибку и перезапустить), используя один из операторы обработки ошибок (https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators) могут помочь, а именно [повторить попытку или повторить попытку] (http://reactivex.io/documentation/operators/retry .html). – Dorus
Есть также несколько полных примеров для 'retryWhen' здесь, на SO. –
@ david.mihola Нравится этот https://stackoverflow.com/questions/18978523/write-an-rx-retryafter-extension-method (неправильный язык, это C#). – Dorus