分析rxerrorhandler开源项目

516 阅读1分钟

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。

来个图,比较清晰。