rxjava qué métodos example español curso componen android retrofit rx-java rx-android subscriber

métodos - ¿Por qué RxJava con Retrofit en Android doOnError() no funciona pero el suscriptor onError sí lo hace?



rxjava example (1)

¿Puede alguien explicarme por qué código como este:

networApi.getList() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .doOnError(throwable -> { throwable.getMessage(); }) .doOnNext(list -> { coursesView.populateRecyclerView(list); courseList = (List<Course>) courses; }).subscribe();

Si no hay internet, ingrese a DoOnError pero lo arroja más lejos para que la aplicación se caiga, pero el código es el siguiente:

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; } });

Funciona como espero, significa que cuando no hay conexión a internet no hace nada.


Básicamente, doOnError no maneja el error, en el sentido de que no lo consume . Simplemente hace algo con él , lo registra, por ejemplo. (Lo mismo es cierto para doOnNext - tampoco consume el elemento y el elemento todavía termina en el onNext del Subscriber ).

El error aún se envía a lo largo de la cadena y aún terminará en el onError del Subscriber .

Estoy bastante seguro de que su aplicación está fallando con una OnErrorNotImplementedException y esto se debe a que no tiene ningún Subscriber en absoluto y, por lo tanto, no hay onError método onError .