Почему RxJava с доработкой на Android doOnError() не работает, но Subscriber onError делает
может кто-нибудь объяснить мне, почему такой код выглядит следующим образом:
networApi.getList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> {
throwable.getMessage();
})
.doOnNext(list -> {
coursesView.populateRecyclerView(list);
courseList = (List<Course>) courses;
}).subscribe();
Если в DoOnError нет доступа в Интернет, он добавляет его дальше, поэтому приложение не работает, но код выглядит следующим образом:
networkApi.getList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<? extends Course>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.getMessage();
}
@Override
public void onNext(List<? extends Course> list) {
coursesView.populateRecyclerView(list);
courseList = (List<Course>) list;
}
});
Работайте, как я ожидаю, это означает, что при отсутствии подключения к Интернету он ничего не делает
веселит
Войтек
Ответы
Ответ 1
В принципе, doOnError
не обрабатывает ошибку, в том смысле, что она ее не потребляет. Он просто что-то делает с ним, например, запишите его. (То же самое верно для doOnNext
- он также не потребляет элемент, и элемент все еще заканчивается в onNext
Subscriber
).
Ошибка по-прежнему отправляется по цепочке и все равно заканчивается на onError
вашего Subscriber
.
Я полностью уверен, что ваше приложение разбивается с помощью OnErrorNotImplementedException
, и это связано с тем, что у вас вообще нет Subscriber
и, следовательно, нет метода onError
.