1-й, я попыталсяКак сохранить подписчика после OnError (RxJava)
// used retrofit
public interface ApiService {
@GET(/get_some_data)
Observable<SomeData> getSomeData();
}
// clickStream created by onClick event
// No.1
clickStream
.flatMap(e -> apiService.getSomeData())
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
это хорошо, если getSomeData() успех. Я могу получить некоторые данные каждый клик.
но если произошла ошибка, отписаться. (так щелчок не работает после ошибки)
второй, я попытался ниже. (С onErrorResumeNext), но отписался.
(не называли OnError, но называется OnComplete. Так отписался)
// No.2
clickStream
.flatMap(e -> apiService.getSomeData())
.onErrorResumeNext(throwable -> Observable.empty()) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
третий, я попытался ниже. (С повторной попытки)
// No.3
clickStream
.flatMap(e -> apiService.getSomeData())
.retry(5) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
это лучше, чем нет 0,1. но без записи.
Я хочу сделать кнопку обновления, которая работает после ошибки.
Я хочу знать
- Могу ли я сохранить или повторно подписаться абонента?
- Правильно ли это в Rxjava?
извините за плохой английский.
Это сработало! Я могу держать абонента после onError. Ключ «** внутренний ** Наблюдаемый». Спасибо! – kyanro
Это не скрывает/подавляет каждую ошибку? –
Да, конечно, либо вы получаете 'onError', либо можете продолжать использовать' Subscriber', но не оба. Однако вы можете исправить некоторый тип сообщения об ошибке: 'throwable -> Observable.just (new ThereWasSomeProblemWithTheApi())). «T» в «Observable» тогда должен был быть каким-то общим интерфейсом, который совместно используется «ThereWasSomeProblemWithTheApi» и вашим фактическим типом данных. –