首页 > 编程知识 正文

retrofit使用详解,retrofit post请求

时间:2023-05-03 21:21:51 阅读:217790 作者:4577

上一篇文章讲解Retrofit使用过程:

https://blog.csdn.net/wk_跳跃的发夹/article/details/104030451

接下来讲解通过源码分析,它的Builder整个过程:

点击Retrofit查看源码:

首先是这七个重要的成员变量:

serviceMethodCache:用于缓存的,存储一些网络请求的配置,网络请求的方法,网络请求的适配器等等。

callFactory: 他是我们请求网络的OkHttp的工厂,

baseUrl : 这是网络请求的URL的基地址

converterFactories:数据转换器工厂的集合,放置数据转换器的工厂

adapterFactories:网络请求适配器工厂的集合,例如,RxJava,

callbackExecutor:用于执行回调的,

valodateEagerly: 标志位,是否立即解析我们接口的方法

 

一,我们点击Builder()查看一下源码:

1,无参构造方法

点击进来之后,我们看到这是他的构造方法,其实这个Builder是Retrofit类的一个内部类:

我们看他的成员变量:

platform: 表示Retrofit适配的平台,例如android,ios等

callFactory: 表示请求网络的okhttp的工厂,

baseUrl: 网络请求的url地址

converterFactories:数据转换器工厂的集合,放置数据转换器的工厂

adapterFactories:网络请求适配器工厂的集合,例如,RxJava,

callbackExecutor:用于执行回调的,

valodateEagerly: 标志位,是否立即解析我们接口的方法

 

细心的读者会看到,Builder与Retrofit类的成员变量大体是一致的。这个构建者模式就是通过Builder类配置的,通过配置这个类就可以把Retrofit类的成员变量初始化了。

 

接下来我们看Builder类的无参构造方法:

他返回的就是我们成员变量离得适配平台,

我们点击Platform,查看Platform这个类:

这是一个单例模式:通过findPlatform来进行实例的,支持不同的平台,

 

findPlatoform这个方法,通过反射机制,Class.forName去查找加载指定的类。返回给我们一个android对象。

 

我们点击Platform.Android(); 查看内部实现了什么?

我们先看DefaultCallBackExecutor:

这个方法表示,我们会返回一个默认的回调方法执行器,作用就是用来切换线程,从子线程切换到主线程,同时可以在主线程中执行回调方法,

大家看看这个代码:是不是上边需要返回的MainThreadExecutor,这个方法做了什么那?

内部是一个Handler,handler方法传入的值是我们的MainLooper,

所以说这就可以看出,这就是他能在主线程中切换的原因。

这个方法又表示什么?

默认的网络请求适配器工厂,让我们的Call请求在异步调用的时候,他会指定我们的Executor,来执行回调。

 

2,Builder有参的构造方法:

首先我们看传入的参数,传入的适配平台,将传入的适配平台赋值给我们的成员变量,

下面有一个非常重要的代码:

this,converterFactories,add(new BuiltInConverters());

这个BuiltInConverters(),表示我们内置的数据转换器工厂,

 

二,baseUrl,

这个是设置网络请求的url地址

我们点击进去看看实现:

1,首先做的判断是这个baseurl是否为空

2.通过parse这个方法将String类型的url转换为HttpUrl类型的变量,

3,return this,baseUrl(httpUrl);进行返回

我们查看baseUrl 实现了什么?

1,还是做非空判断

2. 通过pathSegments();将baseUrl拆分成碎片

3.判断我们最后一个集合是不是以/为结尾的,这个url必须以/为结尾

总结:

baseUrl主要是将String类型的Url转换为HttpUrl类型

 

三,addConverterFactory

用于设置数据解析器的,点击进行查看源码:

主要做的就是讲传递过来的factory加入我们的ConverterFacroties这个集合中。

接下来我们研究传递的参数:

首先需要创建一个Gson对象,进行return Create(new Gson);

那么这个Create做了什么?

他主要创建一个含有gson的GsonConverterFactory。

那么这个GsonConverterFactory做了什么操作?

只是做了一些赋值操作,赋值给final 定义的Gson,并进行返回。

 

四。addCallAdapterFactory 支持RxJava平台

主要做的就是讲传递过来的factory加入我们的adapterFactories这个集合中。

细心的可以看出它与addConverterFactory做的大体一致

点击Create看看如何操作的?

Scheduler 这是RxJava中的调度器,这里不做具体讲解

返回给我们一个RxJavaCallAdapterFactory(Scheduler);

 

五,Build 完成Retrofit的创建

1,首先判断baseUrl不能为null否则就会抛出异常,由此看出BaseUrl的重要性。

2.callFactory,我们网络请求的执行器,

判断是否为null,如果为nyll,就会默认创建一个OkHttpClent();

3,Executor,做异步请求操作的,在子线程做耗时操作,回主线程显示UI,这个时候就会用到它。

4.ArrayList那段代码:主要是将我们网络请求适配器工厂作为参数添加到集合当中,

配置网络请求适配器的工厂,并将平台默认的添加其中,

5.将我们之前传递的参数传到Retrofit当中,

 

这个就是Build方法。

 

整体Retrofit的Builder创建源码分析就这么多。完成整个的创建。

 

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。