我们正在使用RxAndroid +改装进行api调用。
我理解为什么序列中的任何异常都会通过onError()传递Throwable。
但是你如何结束序列,那么你如何处理一个响应并返回再次抛出致命异常?我希望onCompleted()中的处理允许这样做,但我仍然看到onError()被调用。
下面的简化代码段。给出结果 -
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) {
}
});
感谢您的帮助
答案 0 :(得分:0)
我不确定我明白这里要问的是什么。基本上,如果您的Observable getApiCallObservable()
抛出错误,将调用onError,您应该在onError
中相应地处理错误。如果发生这种情况,那么就不会再发生任何事了。如果发生错误,则调用onError
并结束流。如果没有错误,则调用onNext
,这就是您应该对响应做任何事情的地方。在onNext
之后,最后调用onCompleted
。
显示的错误只是说您的arraylist uninitializedList
为空,因此方法调用add()
无效。
编辑。我想我现在明白了。您希望在没有observable调用onError的情况下处理错误。将不完整的代码移动到onNext,它不会属于onError,它会抛出致命的异常。是吗?