一、OkHttp请求基本三步:
//第一步
HttpClient client = new HttpClient.Builder().retry(2).build();
//第二步
Request request = new Request.Builder()
.url("http://www.kuaidi100.com/query?type=yuantong&postid=222222222")
.build();
//第三步
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, Throwable throwable) {
if (DEBUG) Log.d(TAG, "MainActivity onFailure: " + "" + throwable);
}
@Override
public void onResponse(Call call, Response response) {
if (DEBUG) Log.d(TAG, "MainActivity onResponse: " + "" + response.getBody());
}
});
二、OkHttp重要类分类:
1.HttpClient:一个重要成员变量:Dispatcher(调度器),和一个能返回Call的方法:newCall;
2.Dispathcer:内部定义了一个线程池,和两条队列(正在执行队列和等待执行队列);
3.Call:内部定义了真正执行网络清理的线程AsyncCall,它的enqueue方法是通过dispatcher的enqueue的方法,将Runnable传递给Dispatcher的线程池管理执行。
附加说明:
在Call类的getResponse方法中,先定义了四种拦截器:重试拦截器、请求头拦截器、连接拦截器、通信拦截器,通过责任链模式,执行网络请求:
/**
* 这里是重点!!!
* @return
*/
private Response getResponse() throws Exception{
//创建拦截器责任链
List<Interceptor> interceptors = new ArrayList();
//重试拦截器
interceptors.add(new RetryInterceptor());
//请求头拦截器
interceptors.add(new HeaderInterceptor());
//连接拦截器
interceptors.add(new ConnectionInterceptor());
//通信拦截器
interceptors.add(new CallServiceInterceptor());
InterceptorChain chain = new InterceptorChain(interceptors, 0, this, null);
return chain.process();
}
三、责任链模式说明:
责任链模式说明四、OkHttp内部是通过Socket进行网络请求:
socket示意图Demo地址:
手写OkHttp网络请求
网友评论