Почему 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.