Closed tianminggh closed 6 years ago
Thank your issue, 在BaseObserver中有对error的处理有多种情况,可以在其中断点定位问题~
:octocat: From gitme Android
Thank your issue, 在BaseObserver中有对error的处理有多种情况,可以在其中断点定位问题~
:octocat: From gitme Android
根本不会走到BaseObserver的error方法
可以debug看下,是否进入了此方法,再看其中的流程处理~ @Override public void onError(Throwable e) { if (mView == null) { return; } if (mErrorMsg != null && !TextUtils.isEmpty(mErrorMsg)) { mView.showErrorMsg(mErrorMsg); } else if (e instanceof ServerException) { mView.showErrorMsg(e.toString()); } else if (e instanceof HttpException) { mView.showErrorMsg(WanAndroidApp.getInstance().getString(R.string.http_error)); } else { mView.showErrorMsg(WanAndroidApp.getInstance().getString(R.string.unKnown_error)); LogHelper.d(e.toString()); } if (isShowError) { mView.showError(); } }
可以debug看下,是否进入了此方法,再看其中的流程处理~ @override public void onError(Throwable e) { if (mView == null) { return; } if (mErrorMsg != null && !TextUtils.isEmpty(mErrorMsg)) { mView.showErrorMsg(mErrorMsg); } else if (e instanceof ServerException) { mView.showErrorMsg(e.toString()); } else if (e instanceof HttpException) { mView.showErrorMsg(WanAndroidApp.getInstance().getString(R.string.http_error)); } else { mView.showErrorMsg(WanAndroidApp.getInstance().getString(R.string.unKnown_error)); LogHelper.d(e.toString()); } if (isShowError) { mView.showError(); } } debug就是不走这个方法,所以感觉很奇怪
我刚刚debug看了下,最终调用到ObservableFlatMap的onError方法,最后执行的代码为parent.disposeAll()而没有执行到RxJavaPlugins.onError(t)。所以并不会调用到BaseObserver的onError()方法,app也并不会崩溃,源码如下: // 最终调用到ObservableFlatMap中 @Override public void onError(Throwable t) { if (parent.errors.addThrowable(t)) { if (!parent.delayErrors) { // 执行到这里 parent.disposeAll(); } done = true; parent.drain(); } else { // 没有执行到这里 RxJavaPlugins.onError(t); } }
onNext里面执行抛出异常,执行到了 Log.i("hh","yy");但是当执行 emitter.onError(e);的时候却没有执行BaseObserver的onError方法 请问这是原因呢?代码如下
RxUtils中: private static Observable createData(final T t) {
return Observable.create(emitter -> {
try {
emitter.onNext(t);
emitter.onComplete();
} catch (Exception e) {
Log.i("hh","yy");
emitter.onError(e);
}
});
}
SearchListActivity中: @Override public void showSearchList(FeedArticleListData feedArticleListData) {
:octocat: From gitme Android