网上对这三个开源库的组合框架代码已经一搜一大把了,但是都很零碎,需要搜索很多东拼西凑才能写一套完整的复合自己需求的框架。这篇文章就是我自己在封装过程遇到的各种问题的记录和总结,免得很多人重复踩坑。。
一、封装后的效果
|
二、封装过程
1. 全局Client管理类封装 RxRetrofitClient(单例)
在这里初始化各种网络设置
2. Get和Post请求封装
|
|
这里有几个 坑
- 写Form格式的Post请求时,需要添加 @FormUrlEncoded 注解,否则编译器会报错
- 写Json格式的Post请求时,不使用@FieldMap注解,而是使用 @Body 注解,并声明 RequestBody 类型变量
3. RequestBody封装
|
4. 对请求结果统一封装 RESTResult
|
5. 对请求结果进行转换和预处理(map)
|
6. rxjava线程切换封装(compose)
|
这里有一个 坑 :
我把handleRESTFulResult和normalSchedulers封装到了单独的帮助类RxUtil中,这样在使用map或者compose做转换时,需要显式写明返回类型,不然编译器会报错,这点在很多网上查找的资料中都没有提及.map(RxUtil.
handleRESTFulResult())
.compose(RxUtil.normalSchedulers())
7. 对服务器返回的逻辑错误进行统一拦截和封装,抛出异常
|
8. 对Subscriber的封装,同时对onError异常再次封装
|
参考:
https://gank.io/post/56e80c2c677659311bed9841
http://tech.glowing.com/cn/glow-android-performance-optimization/
http://www.jianshu.com/p/f3f0eccbcd6f
http://wuxiaolong.me/2016/06/18/retrofits/
http://stackoverflow.com/questions/35243785/rxjava-static-generic-utility-method-with-transformer