利用工作之外的时间终于看完了xutils3的所有模块的源码,以此博客来记录自己的分析过程,在此约定半年之后重新分析xUtils3源码对比该系列博客看看自己有没有新的突破。
1. xUtils3源码解析之—–image
2. xUtils3源码解析之—–Http(s)
3. xUtils3源码分析之—–DB(ORM)
4. xUtils3源码分析之—–view注解
前言
下面进行xUtils3的网络请求模块的源码分析。
基本使用方法
通过x.http()得到HttpManagerImpl实例进行get.post等请求,请求参数RequestParams封装了请求的一些信息,还有个接口回调请求响应。详细的Demo看作者的。
BaiduParams params = new BaiduParams();
x.http().get(params, new Callback.CommonCallback<List<BaiduResponse>>() {
@Override
public void onSuccess(List<BaiduResponse> result) {
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
// cancelable.cancel(); // 取消请求
}
源码分析
异步get请求
首先看下异步get请求,我们直接从源码开始看下去。首先通过x.http()得到HttpManagerImpl实例,接着调用该实例的get方法,get方法接着调用requeset方法。request方法首先params保存请求方法,接着创建通过请求参数和回调的接口来HttpTask对象,最后通过得到的httpTask实例传入x.task().start(httpTask)方法;
x.http().get(params, Callback.CommonCallback<T> callback);
@Override
public <T> Callback.Cancelable get(RequestParams entity, Callback.CommonCallback<T> callback) {
return request(HttpMethod.GET, entity, callback);
}
@Override
public <T> Callback.Cancelable request(HttpMethod method, RequestParams entity, Callback.CommonCallback<T> callback) {
entity.setMethod(method);
Callback.Cancelable cancelable = null;
if (callback instanceof Callback.Cancelable) {
cancelable = (Callback.Cancelable) callback;
}
HttpTask<T> task = new HttpTask<T>(entity, cancelable, callback);
return x.task().start(task);
}
</