为什么在 Android doOnError() 上进行 Retrofit 的 RxJava 不起作用,但 Subscriber onError 却起作用
Why RxJava with Retrofit on Android doOnError() does not work but Subscriber onError does
谁能解释一下为什么这样的代码:
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;
}
});
按照我的预期工作,这意味着当没有互联网连接时它什么都不做。
基本上,doOnError
不会 处理 错误,因为它不会 消耗 错误。例如,它只是 用它做一些事情 ,记录它。 (对于 doOnNext
也是如此 - 它也不会消耗该项目并且该项目最终仍然在 Subscriber
的 onNext
中)。
错误仍然沿着链发送,并且仍然会在您的 Subscriber
的 onError
中结束。
我很确定您的应用程序因 OnErrorNotImplementedException
而崩溃,那是因为您根本没有任何 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;
}
});
按照我的预期工作,这意味着当没有互联网连接时它什么都不做。
基本上,doOnError
不会 处理 错误,因为它不会 消耗 错误。例如,它只是 用它做一些事情 ,记录它。 (对于 doOnNext
也是如此 - 它也不会消耗该项目并且该项目最终仍然在 Subscriber
的 onNext
中)。
错误仍然沿着链发送,并且仍然会在您的 Subscriber
的 onError
中结束。
我很确定您的应用程序因 OnErrorNotImplementedException
而崩溃,那是因为您根本没有任何 Subscriber
,因此没有 onError
方法。