RxerrorHandler开源项目地址
首先从实际使用入手。
observable
.subscribe(new ErrorHandleSubscriber<List<User>>(mErrorHandler) {
@Override
public void onNext(List<User> users) {
lastUserId = users.get(users.size() - 1).getId();//记录最后一个id,用于下一次请求
if (pullToRefresh) mUsers.clear();//如果是下拉刷新则清空列表
preEndIndex = mUsers.size();//更新之前列表总长度,用于确定加载更多的起始位置
mUsers.addAll(users);
if (pullToRefresh)
mAdapter.notifyDataSetChanged();
else
mAdapter.notifyItemRangeInserted(preEndIndex, users.size());
}
});
主要关注ErrorHandleSubscriber和RxErrorHandler的实例mErrorHandler,ErrorHandleSubscriber实现了Observer。 看一下ErrorHandlerSubscriber唯一实现的方法。
@Override
public void onError(@NonNull Throwable t) {
t.printStackTrace();
//如果你某个地方不想使用全局错误处理,则重写 onError(Throwable) 并将 super.onError(e); 删掉
//如果你不仅想使用全局错误处理,还想加入自己的逻辑,则重写 onError(Throwable) 并在 super.onError(e); 后面加入自己的逻辑
mHandlerFactory.handleError(t);
}
mHandlerFactory是ErrorHandlerFactory类。再看一下ErrorHandlerFactory。
/**
* 处理错误
* @param throwable
*/
public void handleError(Throwable throwable) {
mResponseErrorListener.handleResponseError(mContext, throwable);
}
这里的mResponseErrorListener是从哪里来的?最开始我们传入的mErrorHandler,里面有个mHandlerFactory,mHandlerFactory里面有个mResponseErrorListener。
来个图,比较清晰。
