为什么 Android 上的 RxJava with Retrofit doOnError() 不起作用,而 Subscriber onError 却起作用

2024-01-12

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

 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才不是handle错误,从某种意义上说,它不consume它。它只是用它做某事,例如记录它。 (对于doOnNext- 它也不会消耗该物品,并且该物品仍然最终会出现在onNext of the Subscriber).

错误仍然会沿着链发送,并且仍然会出现在onError你的Subscriber.

我非常确定您的应用程序崩溃了OnErrorNotImplementedException那是因为你没有任何Subscriber根本没有,因此没有onError method.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Android 上的 RxJava with Retrofit doOnError() 不起作用,而 Subscriber onError 却起作用 的相关文章

随机推荐