一定能看懂的 Retrofit 最详细的源码解析

本文详细解析Retrofit的源码,包括初始化配置、API配置、Request过程和服务方法如何发起请求。通过理解Retrofit的工作流程,帮助读者更好地掌握网络框架的使用和问题定位。着重介绍了CallAdapter在请求过程中的作用,以及如何通过反射和ServiceMethod实现网络请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提

只有了解了框架的原理才能更好的使用她,才能定位问题的根本。写这篇文章的也是为了自我的学习和提升。其实看源码就跟看书一样,看了这么多本书有什么用呢,其实不然,这些知识已经潜移默化的影响了你的思维。你之后在阅读源码时,会发现能更快的上手了。

引用别人的一句话:当我还是个孩子时吃的很多食物,大部分已经一去不复返而且被我忘掉了,但可以肯定的是,它们中的一部分已经长成我的骨头和肉

友情提醒

1.这篇文章主要讲retrofit如何request 和 response 2.不会详细到每个api 3.文章会以一个flow 来讲解

上图

如果下图有错误欢迎评论指正,如果看不清你可以下载下来放大看,应该会好点。我们这次会以这个图的flow 来讲解(主要是左半边)。

retrofit初始化配置

这里讲解的就是上图中的adapterFactories,咱们这边以RxjavaAdapter来讲解,下面是一些retrofit的初始化配置。

 private Retrofit createRetrofit(OkHttpClient client, String url) {
 return new Retrofit.Builder()
 .baseUrl(url)
 .client(client)
 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
 .addConverterFactory(GsonConverterFactory.create())
 .build();
 }

这里我们只说一下主要的东西,大家都知道retrofit的adapter 我们根据我们api请求的不同设置不同的adapter来让retrofit执行不同的操作,当我们在设置他的CallAdapter时,点进源码可以看到,retrofit把这个CallAdapter存入了一个集合中

final List

然后通过build把这个集合回传给了retrofit的这个全局边变量List<CallAdapter.Factory> adapterFactories保存着这些CallAdapter,仔细看的同学会发现,retrofit会默认给你添加一个CallAdapter

public Retrofit build() {
 if (baseUrl == null) {
 throw new IllegalStateException("Base URL required.");
 }
​
 okhttp3.Call.Factory callFactory = this.callFactory;
 if (callFactory == null) {
 callFactory = new OkHttpClient();
 }
​
 Executor callbackExecutor = this.callbackExecutor;
 if (callbackExecutor == null) {
 callbackExecutor = platform.defaultCallbackExecutor();
 }
​
 // Make a defensive copy of the adapters and add the default Call adapter.
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值