文章目录
图解
1.简单的get异步请求
String url = "https://www.baidu.com/";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse: response="+response.toString());
}
});
一:创建OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient();
okhttp源码
public OkHttpClient() {
this(new Builder());
}
创建的 OkHttpClient对象时并且默认构造builder对象进行初始化
二:初始化请求对象
Request request = new Request.Builder().url(url).build();
Request:每一次网络请求都是一个request,Request是对url,method,header,body的封装,也是对http协议中请求行、请求头和实体内容的封装。属于构建者模式。
##三:发起请求
@Override
public Call newCall(Request request) {
return new RealCall(this, request, false /* for web socket */);
}
RealCall是Call接口的实现
final class RealCall implements Call {
RealCall(OkHttpClient client, Request originalRequest, boolean forWebSocket) {
final EventListener.Factory eventListenerFactory = client.eventListenerFactory();
this.client = client;
this.originalRequest = originalRequest;
this.forWebSocket = forWebSocket;
this.retryAndFollowUpInterceptor = new RetryAndFollowUpInterceptor(client, forWebSocket);
// TODO(jwilson): this is unsafe publication and not threadsafe.
this.eventListener = eventListenerFactory.create(this);
}
}
###异步请求的执行流程
@Override public void enqueue(Callback responseCallback) {
synchronized (this) {