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
.