Android网络编程(十一)源码解析Retrofit

本文详细剖析了Retrofit的创建过程,包括如何通过建造者模式构建Retrofit,以及创建Call对象的过程。讲解了ServiceMethod的加载、CallAdapter和Converter的作用,同时也分析了Call的enqueue方法如何处理网络请求及响应数据的转换。
摘要由CSDN通过智能技术生成

相关文章
Android网络编程(一)HTTP协议原理
Android网络编程(二)HttpClient与HttpURLConnection
Android网络编程(三)Volley用法全解析
Android网络编程(四)从源码解析volley
Android网络编程(五)OkHttp2.x用法全解析
Android网络编程(六)OkHttp3用法全解析
Android网络编程(七)源码解析OkHttp前篇[请求网络]
Android网络编程(八)源码解析OkHttp后篇[复用连接池]
Android网络编程(九)Retrofit2前篇[基本使用]
Android网络编程(十)Retrofit2后篇[注解]

前言
最近博客的产出确实很少,因为博主我正在写一本Android进阶书籍,两头很难兼顾,但是每个月也得至少发一篇博客。上一篇我们介绍了Retrofit的使用方法,这一篇我们照例来学习Retrofit的源码。

1.Retrofit的创建过程

当我们使用Retrofit请求网络时,首先要写请求接口:

public interface IpService {
    @GET("getIpInfo.php?ip=59.108.54.37")
      Call<IpModel> getIpMsg();

接着我们通过调用如下代码来创建Retrofit:

   Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

Retrofit 是通过建造者模式构建出来的,接下来查看Builder方法做了什么:

  public Builder() {
      this(Platform.get());
    }

很简短,查看Platform的get方法,如下所示。

 private static final Platform PLATFORM = findPlatform();
  static Platform get() {
    return PLATFORM;
  }
  private static Platform findPlatform() {
    try {
      Class.forName("android.os.Build");
      if (Build.VERSION.SDK_INT != 0) {
        return new Android();
      }
    } catch (ClassNotFoundException ignored) {
    }
    try {
      Class.forName("java.util.Optional");
      return new Java8();
    } catch (ClassNotFoundException ignored) {
    }
    try {
      Class.forName("org.robovm.apple.foundation.NSObject");
      return new IOS();
    } catch (ClassNotFoundException ignored) {
    }
    return new Platform();
  }

Platform的get方法最终调用的是findPlatform方法,根据不同的运行平台来提供不同的线程池。接下来查看build方法,代码如下所示。

   public Retrofit build() {
      if (baseUrl == null) {
  //1
        throw new IllegalStateException("Base URL required.");
      }
      okhttp3.Call.Factory callFactory = this.callFactory;//2
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值