关于Android高性能Restful请求的通用封装(单Retrofit和Retrofit+RxJava)

磨刀不误砍柴工,我们在开始一个完整的项目之前,首先需要的是一个趁手的工具和框架。很多使用过Retrofit的同学,在网上都应该查到过很多基于Retrofit或基于Retrofit+RxJava的框架,但是总感觉不够通用。所谓通用,意思就是要能在任何时候都快速的接入,快速的进行请求,回调,Loading的展示和取消,以及各种更复杂的网络场景。

我在《Android通用框架设计与完整电商App开发》这个慕课网的实战课里讲到过这样的设计,废话不说,上思路和部分代码

首先呢,需要有包的结构,我这里是这样划分的

那么首先的话,我们先来侃侃没有RxJava的Retrofit

首先我们需要有依赖,

 //网络请求依赖
    compile 'com.squareup.okio:okio:1.13.0'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.3.0'

我们创建RestServices,这是一个请求的接口,用来定义请求的方式,比如GET POST PUT DELETE DOWNLOAD UPLOAD


这里的话我返回的类型是一个泛型为String的Call,为什么我没有像大部分的网上教程一样返回一个Entity或者Bean呢,因为我们这里为了达到通用的效果,字符串返回的是一个Restful请求的返回值,可以是Json,当然,也可以是XML,虽然不推荐。拿到了返回值之后,我们可以用任何我们想要的方式去解析,推荐阿里巴巴的FastJson,谁用谁知道,这里特别的给大家提一下,FastJson的话在Android要使用android版本的,否则会有很多坑。

使用建造者模式的Android变体来进行参数和请求体的构建,首先,一个Retrofit客户端其实只需要一个全局实例的,这里呢,我们在RestCreator类里进行线程安全的惰性单例


这样的话我们就能实例化Retrofit了,其中,里面的BASE_URL是请求的API的域名,使用的时候就不需要写域名了。当然,如果有多个域名请求的话,只需要配置最常用的那个就好,其它的写上完整的请求地址就可以了,这里还是非常灵活的。

关于BASE_URL和OK_HTTP_CLIENT,这个在全局的唯一入口来进行配置。我在慕课网的课程中把这个框架叫做Latte(拿铁),简单的给大家看看


是不是很简单,所有的事件,所有的回调,哦对了,还有咱的网络请求配置,都在这唯一的入口里

然后我们在Builder里面,创建这样的一些方法


最后在RestClient里面创建相应的请求


而同时,我们的Loading也在RequestCallbacks里面进行判断,这样我们使用的时候就变成了


是不是行云流水呢,使用起来非常的舒服

那么关于RxJava的集成呢,这里的话我添加了rx包,去掉了回调的接口,直接使用RX的观察者方式去进行数据流的展示。毕竟是响应式编程嘛,加上回调接口了还像什么样

比如,我在RxRestService中,返回值由之前的Call<String>改为了


这样的形式,那么在调用时候呢,仅仅需要改个客户端的实现就好


你看,没什么迁移成本吧,反正仁者见仁智者见智,想用哪个随你,做项目,唯快不破,要快,就得有适合自己的框架,而最适合自己的,就是自己为自己量身定制的框架,不是吗

详细的架构和讲解呢,在我慕课网的课程里

《Android通用框架设计与完整电商App开发》     网址是http://coding.imooc.com/class/116.html

相关文章

《单Activity架构,丝滑般享受》

《在慕课网授课后关于学习模式的实践和思考》

以后多多给大家更新视频和文章啦,嗯,收工

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值