}
而Build.VERSION.SDK_INT的判断逻辑为:
翻译过来的意思就是:
当前在此硬件上运行的软件的SDK版本。这个值在设备启动时不会改变,但可能会在硬件制造商提供OTA更新时改变;
下面我们来看一下这个Android类对应的源码:
Android类对应的源码不多,就几个方法,这里我们重点关注下面这几个方法:
**(1)defaultCallbackExecutor():**默认的线程执行器Executor,从源码可以看出,获取的是主线程的Hander,execute的时候,会post到主线程执行;
**(2)defaultCallAdapterFactories:**获取默认的CallAdapter.Factory,用于创建CallAdapter;
**(3)defaultConverterFactories:**获取默认的数据转换工厂ConverterFactory,用于创建转换器Converter;
总结:Platform主要是用于适配不同的平台,用于获取默认的Executor,请求适配器工厂类CallAdapterFactory,数据转换工厂类ConverterFactory等;
4.2、baseUrl
baseUrl,是我们网络请求的基础URL;
我们进源码里面看一下,具体做了啥操作;
这里主要做了两步操作:
1、首先第一步是通过解析这个baseUrl并返回一个HttpUrl对象; 2、第二步是将第一步创建的HttpUrl对象赋值给Builder;
这里我们主要看第一步的具体操作,这里的逻辑是在HttpUrl的 parse(@Nullable HttpUrl base, String input)里,通过解析URL,判断该请求的scheme是为http还是https,如果不是这其中一个,那么就会抛出异常,源码我们大致看一下;
然后下面还会解析URL,获取到主机地址host,端口号port,具体源码我就不贴了,感兴趣的可以跟着源码看一下;
4.3、Converter.Factory
这个我们上面在接受Retrofit的成员变量的时候有提过,是用于创建Converter的工厂,使用了抽象工厂的设计模式,而Converter是用来将请求返回的数据,转化为对应平台的数据,而这里,我们使用的是Gson平台;
我们先来看一下这个Converter.Factory,看看其背后是怎么实现的;
从源码可以看出,Converter.Factory是Converter的内部类,主要有两个方法,一个是requestBodyConverter,用于将请求的RequestBody转换为对应的转换器Converter;
另一个方法是responseBodyConverter,用于将返回的返回体ResponseBody转换为对应的转换器Converter;
而转换器Converter里面只有一个方法convert,用于将返回的数据转换为对应的类型;
我们在创建Retrofit的实例时,是通过GsonConverterFactory.create()来创建对应的转换器工厂的,下面我们来看看这个Gson的转换器工厂是怎么实现的;
先来看一下这个create()的方法;
最终是走的这里,进行了简单的赋值;
GsonConverterFactory这个工厂最重要的还是responseBodyConverter和requestBodyConverter方法,下面我们来具体分析;
- requestBodyConverter:
在requestBodyConverter方法里面,通过class的Type类型,创建了Gson的TypeAdapter,这个TypeAdapter很熟悉,就是我们使用gson解析会用到的类,最终通过TypeAdapter和gson的参数创建了GsonRequestBodyConverter对象,下面来瞄一眼这个类的代码;
这个类的源码很简单,我们主要convert()这个方法;
这个方法的逻辑就是将传进来的value值通过TypeAdapter将其转化为ByteString,然后再传进RequestBody作为参数来构建RequestBody对象;
这个方法我们先了解到这里,后面在这个requestBodyConverter调用的地方再来讲一下;
-
responseBodyConverter:
-
这个方法和上面那个requestBodyConverter方法有点类似,也是通过class的Type类型,创建了Gson的TypeAdapter,最终通过TypeAdapter和gson的参数创建了GsonResponseBodyConverter,同理,我们也来看一下这个类的实现吧;
源码很简单,这里我们也是关注convert()这个方法;
这里的逻辑有没有很熟悉,就是我们经常用的gson解析,通过TypeAdapter读取JsonReader的数据,返回对应的数据类型,这里的参数ResponseBody就是我们上面GsonRequestBodyConverter的convert方法生成的;
到这里GsonConverterFactory就讲的差不多了,后面我们在用到的地方再详细讲一下;
4.5、CallAdapter.Factory
CallAdapter.Factory,从命名可以看出,是用来创建CallAdapter的工厂类,使用了抽象工厂的设计模式,而CallAdapter是用于将Call转化为我们所需要的请求类型,比如将Call转化为RxJava的调用类型;
而CallAdapter里面是通过adapt方法来进行转换的,adapt是接口的一个方法,交给子类去实现,这个方法的逻辑,我们下面将Retrofit的解析时,再统一讲解,这里是需要了解这是一个转换的方法即可;
image.png
下面我们来看看创建CallAdapter的工厂里面都有哪些方法,分别是用来干嘛的;
image.png
这个Factory的逻辑很少,只有几个方法,这里我们主要关注get方法,通过get方法来获取CallAdapter的对象,同理,这里也是交给子类去实现;
而上面我们Retrifit的创建,在CallAdapter.Factory的添加时,使用了RxJava的工厂,也就是RxJava2CallAdapterFactory,用于将Call请求转换为RxJava对应的请求;
下面我们来看看这个RxJava2CallAdapterFactory的实现逻辑吧;
RxJava2CallAdapterFactory的创建,也是通过RxJava2CallAdapterFactory.create()的方法,那么我们来看下这个create方法做了啥?
只是简单的new了一个Rx