【问题标题】:RxAndroid - how to throw fatal exceptions after onCompleted()RxAndroid - 如何在 onCompleted() 之后抛出致命异常
【发布时间】:2015-08-03 05:00:34
【问题描述】:

我们正在使用 RxAndroid + 改造我们的 api 调用。

我有点理解为什么序列中的任何异常都会通过 onError() 传递 Throwable。

但是如何结束序列,然后如何处理响应并返回再次抛出致命异常?我原以为 onCompleted() 中的处理会允许这样做,但我仍然看到 onError() 被调用。

下面是简化的sn-p。给出结果 -

throwable: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference

        Observable<ResponseModel> observable = getApiCallObservable();
        AppObservable.bindFragment(this, observable)
                .subscribeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResponseModel>() {
                    @Override
                    public void onCompleted() {
                        uninitializedList.add("item");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e(TAG, "throwable: " + e.getMessage());
                    }

                    @Override
                    public void onNext(ResponseModel response) {
        
                    }
                });

感谢您的帮助

【问题讨论】:

    标签: java android exception rx-java rx-android


    【解决方案1】:

    我不确定我是否理解这里要问的内容。基本上,如果您的 Observable getApiCallObservable() 抛出错误,onError 将被调用,您应该在 onError 中相应地处理错误。如果发生这种情况,就这样,就不会再发生任何事情了。如果发生错误,则调用onError 并结束流。如果没有错误,onNext 会被调用,这就是你应该对你的响应做任何事情的地方。在onNext 之后,最后,onCompleted 被调用。

    显示的错误只是说您的数组列表uninitializedList 为空,因此方法调用add() 无效。

    编辑。我想我现在明白你的意思了。你想处理错误而不被 observable 调用 onError 。将你的oncomplete代码移动到onNext,它不会属于onError,它会抛出致命异常。是吗?

    【讨论】:

    • 尝试移至 onComplete,onError 再次收到带有 npe 的调用。基本上我希望应用程序在发生异常时崩溃。例如,如果我得到一个 api 响应以保留在数据库中。我不希望 Rx 在此过程中处理数据库异常或任何其他崩溃。我希望 Rx 仅包含在 api 调用中。
    • 如我所说,将您的代码移至 onNext。使用 subscribeOn(Schedulers.io) 和 observeOn(AndroidSchedulers.newThread)。它应该解决我认为的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多