【问题标题】:Why RxJava with Retrofit on Android doOnError() does not work but Subscriber onError does为什么在 Android doOnError() 上使用 Retrofit 的 RxJava 不起作用但订阅者 onError 可以
【发布时间】:2016-02-13 16:45:23
【问题描述】:

谁能解释一下为什么这样的代码:

 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;
                }
            });

按照我的预期工作,这意味着当没有互联网连接时它什么也不做。

【问题讨论】:

    标签: android retrofit rx-java rx-android subscriber


    【解决方案1】:

    基本上,doOnError 不会处理错误,因为它不会使用它。它只是用它做一些事情,例如记录它。 (doOnNext 也是如此 - 它也不会消耗该项目,并且该项目仍会在 onNextonNext 中结束。

    错误仍会沿链向下发送,最终仍会出现在您的 SubscriberonError 中。

    我很确定您的应用程序因OnErrorNotImplementedException 而崩溃,这是因为您根本没有任何Subscriber,因此没有onError 方法。

    【讨论】:

    • @david.mihola 有没有办法通过改造 beta 2 处理 HTTP 状态代码 onError ?
    • 是的,它有效,但为什么呢?我不清楚为什么 doOnError 不起作用。你能举一个doOnError的好用法的例子吗?
    • @JhonFredyTrujilloOrtega:除了日志记录,不是真的。将它用于 UI 更新很诱人(当网络请求发出 onError 时隐藏进度指示器),但请参阅 Jake Wharton 的演讲 jakewharton.com/the-state-of-managing-state-with-rxjava 以获得不使用 doOn* 方法的更简洁的替代方案。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2021-06-03
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多