有人可以解释我为什么这样的代码:

 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也是如此-它也不会消耗该项目,并且该项目仍以onNextSubscriber结尾)。

错误仍然沿着链发送,并且仍然会在onErrorSubscriber中结束。

我可以肯定的是您的应用程序崩溃时出现了OnErrorNotImplementedException,这是因为您根本没有任何Subscriber,因此也没有onError方法。

07-28 03:24
查看更多