Почему RxJava с дооснащением на Android doOnError() не работает, но абонент 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;
                }
            });

работа, как я ожидаю, это означает, когда нет подключения к интернету он ничего не делает

ура Войтек!--3-->

1 ответов


по сути, doOnError не дескриптор ошибка, в том смысле, что она не потреблять его. Это просто делает что-то с ним, зарегистрируйте его, например. (То же самое верно и для doOnNext - Он также не потребляет элемент, и элемент по-прежнему заканчивается в onNext на Subscriber).

ошибка по-прежнему отправляется вниз по цепочке и все равно заканчивается в onError вашего Subscriber.

Я уверен, что ваше приложение сбой с OnErrorNotImplementedException и это потому, что у вас нет никаких Subscriber вообще и поэтому нет onError метод.