Mam następujący Obserwowalne który wykona odpocząć-Call z modernizacją co 30 sekund:RxJava dla Androida: Expose wyjątek i ponowić (z opóźnieniem)
Subscription subscription = Observable.interval(0, REFRESH_INTERVAL, TimeUnit.SECONDS)
.concatMap(new Func1<Long, Observable<Response>>() {
@Override
public Observable<Response> call(Long time) {
return webservice.callRetrofitServiceWithRx(parameter);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new UpdateSuccessAction(), new UpdateErrorAction());
Może się zdarzyć, że (zwłaszcza REST-Call) rzuci wyjątek (np. brak połączenia z Internetem).
Co chciałbym osiągnąć:
obserwowalnym powinien emitować/wystawiać wyjątek, tak że mogę wyświetlić komunikat o błędzie w interfejsie, lecz powinien on kontynuować emitując przedmioty (ponownie w ciągu 30 sekund) .
Obecnie badania
Gdybym nie określają żadnego szczególnego zachowania obserwowalnego emituje wyjątek i przestanie działać (= NO ponownych prób w ciągu 30 sekund).
Jeśli spróbuję ponownie uruchomić operatora, wyjątek zostanie połknięty i nie jest narażony, więc nie mogę wyświetlić błąd w interfejsie użytkownika.
Jeśli wypróbuję operatora onErrorReturn, mogę obsłużyć wyjątek, ale nie można ponowić próby, o ile wiem.
Obejście
Moje bieżące obejście jest ponownie zapisać się do tego Obserwowalne, ale chciałbym wiedzieć, czy ktoś ma bardziej eleganckie rozwiązanie.
Cool, dzięki! – Christopher