关于Android高性能Restful请求的通用封装(单Retr
磨刀不误砍柴工,我们在开始一个完整的项目之前,首先需要的是一个趁手的工具和框架。很多使用过Retrofit的同学,在网上都应该查到过很多基于Retrofit或基于Retrofit+RxJava的框架,但是总感觉不够通用。所谓通用,意思就是要能在任何时候都快速的接入,快速的进行请求,回调,Loading的展示和取消,以及各种更复杂的网络场景。
我在《Android通用框架设计与完整电商App开发》这个慕课网的实战课里讲到过这样的设计,废话不说,上思路和部分代码
首先呢,需要有包的结构,我这里是这样划分的
那么首先的话,我们先来侃侃没有RxJava的Retrofit
首先我们需要有依赖,
[plain]view plaincopy
//网络请求依赖
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改为了
这样的形式,那么在调用时候呢,仅仅需要改个客户端的实现就好
你看,没什么迁移成本吧,反正仁者见仁智者见智,想用哪个随你,做项目,唯快不破,要快,就得有适合自己的框架,而最适合自己的,就是自己为自己量身定制的框架,不是吗
详细的架构和讲解呢,在我慕课网的课程里
《Android通用框架设计与完整电商App开发》网址是http://coding.imooc.com/class/116.html
相关文章
以后多多给大家更新视频和文章啦,嗯,收工