为什么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; } }); 

工作如何我期望,这意味着当没有互联网连接,它什么都不做

欢呼Wojtek

Solutions Collecting From Web of "为什么RxJava与Android上的改造doOnError()不起作用,但Subscriber onError"

基本上, doOnError处理错误,因为它不会消耗它。 它只是做了一些事情 ,logging下来,例如。 (对于doOnNext也是如此 – 它也不会消耗该项目,并且该项目仍然在onNext上结束)。

错误仍然发送到链中,并仍然会在您的SubscriberonError结束。

我很确定你的应用崩溃了一个OnErrorNotImplementedException ,那是因为你根本没有任何的Subscriber ,因此没有onError方法。