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

前提

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

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

友情提醒

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Retrofit 是一个基于注解的、简化网络请求的库,它将网络请求和数据解析封装在一起,使得我们只需要关注业务逻辑即可。 下面我来介绍一下如何使用 Retrofit。 1. 添加依赖 首先,需要在项目的 build.gradle 文件中添加 Retrofit 的依赖: ``` implementation 'com.squareup.retrofit2:retrofit:2.9.0' ``` 如果需要使用 Retrofit 的 Gson 转换器,还需要添加以下依赖: ``` implementation 'com.squareup.retrofit2:converter-gson:2.9.0' ``` 2. 创建 Retrofit 实例 在使用 Retrofit 之前,需要先创建一个 Retrofit 实例。通常情况下,我们会在 Application 的 onCreate() 方法中创建 Retrofit 实例。 ``` public class MyApplication extends Application { private static Retrofit retrofit; @Override public void onCreate() { super.onCreate(); // 创建 Retrofit 实例 retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); } public static Retrofit getRetrofit() { return retrofit; } } ``` 在上面的代码中,我们通过 Retrofit.Builder() 方法创建了一个 Retrofit 实例,并通过 baseUrl() 方法设置了服务器的地址。addConverterFactory() 方法用于设置数据解析器,这里我们使用 GsonConverterFactory。最后调用 build() 方法创建 Retrofit 实例。 3. 创建网络请求接口 接下来,我们需要创建一个网络请求接口,用于定义具体的网络请求方法。 ``` public interface ApiService { @GET("users/{username}") Call<User> getUser(@Path("username") String username); } ``` 在上面的代码中,我们通过 @GET 注解定义了一个 GET 请求方法,并在方法中使用了 @Path 注解来指定动态路径参数。方法的返回值是一个 Call 对象,它表示网络请求的响应结果。 4. 发起网络请求 最后,我们可以在业务逻辑中使用 Retrofit 实例和网络请求接口来发起网络请求。 ``` ApiService apiService = MyApplication.getRetrofit().create(ApiService.class); Call<User> call = apiService.getUser("octocat"); call.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful()) { User user = response.body(); // 处理响应结果 } else { // 处理请求失败的情况 } } @Override public void onFailure(Call<User> call, Throwable t) { // 处理网络请求失败的情况 } }); ``` 在上面的代码中,我们通过 MyApplication.getRetrofit() 方法获取 Retrofit 实例,并使用 create() 方法创建 ApiService 的实例。然后调用 getUser() 方法发起网络请求,并在请求回调中处理响应结果。 以上就是 Retrofit 的基本使用方法。通过 Retrofit,我们可以轻松地进行网络请求,同时也可以自定义网络请求的拦截器等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值