Tamic
原文:
http://www.tamicer.com
RetrofitClient
基于Retrofit2.0封装的RetrofitClient.
- 避免重复创建Retrofit实列.
- 调用方便简洁.
- 无需重复设置属性的步骤.
- 可固定配置 Host 也可动态配置Url、请求头、参数等.
- 支持文件下载和上传.
- 支持json形式提交.
- 支持扩展APIService
- 统一处理无网络情况,和支持加载进度
- 结合RxJava
- 支持缓存机制
使用原生的Retrofit请求网络,熟悉的朋友必定了解,在某个ApiServie方法多时 Retrofit设置就显得有点累赘,今天给大家带来对Retrofit的基本封装。这次对Retrofit进阶篇,本次封装已加入RxJava,请在阅读下文前请先了解RXJAVA和本人写的Retrofit系列文章;
基本步骤:
构建Retrofit的接口service.
构建基础拦截器 Interceptor.
构建Cookie管理工具CookieManger.
构建 单列RetrofitClient客户端.
RetrofitClient的使用.
ApiService
请求网络的API接口类,这里你可以增加你需要的请求接口,也可复用已经实现的几个方法。
|
|
上面新增了几个常用的请求方法
第一个只是普通写法的列子,
url
,请求头,参数都是写死的。 不建议这么做第二,三个分别是Get 和POST请求,
method Url
,headers
,body
参数都可以动态外部传入。四 五是单文件/图片和多文件/图片上传
构建基础拦截器
用来设置基础heade
r,这里是通过MAP键值对来构建,将heder加入到Request
中。
|
|
构建Cookie管理者
用来管理cookie, 储存cookie的store这里不再重复说明,具体列子请见:
|
|
#构建RetrofitClient客户端.
今天重要的环节来了,RetrofitClient主要负责创建具体Retrofit,和调度分发请求。设置格式工厂。添加cookie同步,构建OkHttpClient,添加BaseUrl,对加密证书https我没做加入,希望读者参考我的本系列文章自行加入,因为我不喜欢升伸手党。
|
|
细心的朋友已经发现上面代码 在指定生产线程和消费线程的时候,步骤有点麻烦,每个api都得进行指定线程,那么可以利用rxJava的转换器写一个Transformer
那么api可以这样优化了:
|
|
调用 RetrofitClient
|
|
代码很简洁,在用到的地方获取单列直接调用你需要的方法,在RxSubscriber
回调中处理你的业务逻辑即可,无需考虑是否在主线程,其他调用方法同上。
很多时候BaseApiService无法满足需求时,Retrofit增加了扩展接口 create
来创建你的API,接着调用execute
就可以和RxJava关联
|
|
总结
本次封装只对retrofit进行了简单封装,很多场景和需求还是存在缺陷,这种单列模式已不符合目前流行的Builder模式,本人已开始进行下一步的封装工作,:
笔者已开发了新的框架开发Novate:
https://github.com/tamicer/Novat
源码 GitHub :https://github.com/NeglectedByBoss/RetrofitClient
已全部更新完成
系列导读:
- Novate网络库:Retrofit2.0和RxJava1.x的又一次完美封装。
- Retrofit 2.0 超能实践(九)Rxjava结合Retrofit,如何优雅的取消请求!
- Retrofit 2.0 超能实践(八)源码解析,玩转IOC和AOP, 徒手实现属于你的Retrofit框架
- Retrofit 2.0 超能实践(七)Rxjava +Retrofit 你需要掌握的几个经典技巧
- Retrofit 2.0 超能实践(六)基于Retrofit2.0+RxJava 封装的超好用的RetrofitClient工具类
- Retrofit 2.0 超能实践(五),动态Okhttp对Request统一添加header和Parameter
- Retrofit 2.0 超能实践(四),实现大文件多线程断点下载
- Retrofit 2.0 超能实践(三),轻松实现多文件/图片/Json字符串/表单提交上传
- Retrofit 2.0 超能实践(二),Okhttp完美同步持久Cookie实现免登录
- Retrofit 2.0 超能实践(一),完美支持加密Https传输
第一时间获取各位大佬的技术文章和资讯请关注微信公众号!