Retrofit源码学习五:Retrofit中同步、异步请求解析

本文详细介绍了Retrofit框架中如何通过OkHttp实现同步网络请求的执行过程,包括ParameterHandler处理参数、ServiceMethod构建请求、数据解析以及GsonConverterFactory的作用。作者强调了Retrofit封装的便捷性和底层OkHttp的运用。
摘要由CSDN通过智能技术生成

我们先来总结一下同步方法的步骤:

同步请求: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) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值