我们先来总结一下同步方法的步骤:
同步请求:OkHttpCall.execute()
=========================
一、用ParameterHandler对网络请求接口中的方法、参数进行解析
二、用ServiceMethod创建一个Okhttp的Request对象
三、通过okhttp发送网络请求
四、用数据解析器converter解析服务器返回的数据(Retrofit中默认用的是GsonConverterFactory)
如下图所示:
我们看具体的代码:
//class OkHttpCall开始
final class OkHttpCall implements Call {
private okhttp3.Call rawCall;
@Override
public Response execute() throws IOException {
okhttp3.Call call;
synchronized (this) {
if (executed) throw new IllegalStateException(“Already executed.”);
executed = true;
if (creationFailure != null) {
if (creationFailure instanceof IOException) {
throw (IOException) creationFailure;
} else {
throw (RuntimeException) creationFailure;
}
}
call = rawCall;
if (call == null) {
try {
call = rawCall = createRawCall();
} catch (IOException | RuntimeException e) {
creationFailure = e;
throw e;
}
}
}
if (canceled) {
call.cancel();
}
return parseResponse(call.execute());
}
private okhttp3.Call createRawCall() throws IOException {
Request request = serviceMethod.toRequest(args);
okhttp3.Call call = serviceMethod.callFactory.newCall(request);
if (call == null) {