博客转移到个人站点:http://www.wangchengmeng.club/2018/02/01/Rxjava+MVP+Retrofit%E5%BC%BA%E5%BC%BA%E8%81%94%E5%90%88/
欢迎来吐槽
作为一个已经在IT行业混搭了快三年的Android开发人员,一直熟悉与被所有人认同的MVC模式,并且通过学习也搭建有自己的网络框架,数据库ORM框架,所以在项目中一直也停留在这些很普通的知识使用上。但最近参加看一个比较大型的项目,发现仅仅使用以前的思想,在后期开发和维护中会出现很大的问题,代码耦合性太高,程序员最怕的就是迁一发动全身的时候,那是会让人慢慢奔溃的,并且各种异步,回调的代码,有句话叫迷之缩进毁一生,确实是这样的,现在是深深体会到这样的情况,所以在最近兴起的RxJava这种响应式的编程结构,以及MVP这种非常解耦的模式,以及和Rxjava产生基情的Retrofit网络框架,所以决定研究一下,将三者一起使用,你会发现你找到了新的出路。
Rxjava
这种响应式的模式,在代码结构上采用链式调用的方式,结构很清晰,从上而下执行,
并且可以完美的解决我刚刚时候的迷之缩进毁一生,它可以很简单的完成异步处理,指定各自工作的线程即可。推荐一篇很好介绍
RXjava的文章。建议初学者先看看这篇文章,我也封装了属于自己的写了Demo,
详情点击这里,先上我封装好了代码体验一下吧。
MVP
一张图对比一下MVC和MVP体验一下两种模式的区别:
MVP中实际上Activit承担了两种角色那就是View和Controller,所以随着项目的发展你会发现你的Activity会越来越臃肿,导致很难维护,而且很难做修改,总之就是很乱。但看了MVP你会发现View和Model之间没有直接的联系,presenter这个中介就成了传输的重要桥梁。那么Activity这个时候就是真正的V层了,之做UI方面的更新之类的操作,业务层的逻辑不会出现的Activity中,那么你的Activity中的代码会格外的清晰。
而在Presenter中再结合Rxjava这种响应式,将业务层逻辑放在专门的Manager中,在P层的代码也不会出现迷之缩进的情况,因为Rxjava可以直接指定线程工作。先看看MVP的工程目录结构:
Retrofit
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。
1、创建业务请求接口,具体代码如下
这里需要稍作说明,@GET注解就表示get请求,@Query表示请求参数,将会以key=value的方式拼接在url后面
2、创建一个Retrofit的示例,并完成相应的配置
client(new OkHttpClient())创建一个client
addConverterFactory(GsonConverterFactory.create())Goson解析
3、创建ManagerService
4、拿到了service,现在就可以直接请求网络了
那么久完成了一个Request,接下来介绍一些常用的参数:
1、GET方式
1、@Query
et方法请求参数都会以key=value的方式拼接在url后面,Retrofit提供了两种方式设置请求参数。第一种就是像上文提到的直接在interface中添加@Query注解,还有一种方式是通过Interceptor实现,直接看如何通过Interceptor(一般用于headers或者一些通用参数等)实现请求参数的添加。
添加header:
创建httpclien的时候将Interceptor添加进去:
2. @QueryMap
- Query集合
4. @Path
POST:
1. @field
- @FieldMap
- @Body
介绍一些,推荐一篇文章,关于介绍Retrofit
了解了Rxjava+MVP+Retrofit的文章很多,我也看过很多篇文章,然后写了Demo,做了封装,可以参考参考,详情点击这里