美文网首页Android网络框架
基于RxJava和Retrofit的二次封装

基于RxJava和Retrofit的二次封装

作者: ReturnYHH | 来源:发表于2016-12-04 20:20 被阅读1725次

前言:

在几个月前,我曾经也写过这样的一篇文章,后来回头看的时候,发现写的真的是太糟糕了,很多地方没有写出说明,而且封装的思路等也没写出来,因此,决定重新写。


1.为什么要封装?
简单粗暴一句话:减少代码量,方便调用和维护
2.封装的步骤:
①:定义一个实体类,统一存放请求得到的数据(数据需要和后台达成一致)
②:定义一个类,用来存放网络请求的地址
③:定义一个类,用来统一处理网络请求
④:定义一个类,用来处理网络请求前,请求后,包括请求失败,请求成功,没有网络的情况
⑤:定义一个类,用来剥离请求后的需要的数据部分(也可以不需要)
现在就开始具体的代码实现


一:统一的实体类

实体类.png

其中,data就是我们真正需要的数据部分


二:网络请求地址类

网络请求地址类.png

可以看到,我们有一个统一的接口,还有一个登录的接口地址


三:网络请求类


我们通过okHttpClient.builder构建出一个httpClientBuilder,并且设置了超时时间,使用的是单利模式,并且返回通过retrofit.create(service)返回一个泛型类,为rxjava做准备


四:网络请求的操作

我们在请求网络时,在请求前,请求后都有对应的操作,在发起请求的前,首先我们需要检查是否有网络,没有就告诉用户,并且不发起请求,否则,就显示一个对话框告诉用户正在进行加载数据,请求完成后,对话框消失,如果成功,则把数据回调,否则弹出失败的原因

(由于代码比较长,所以采用分段截图,望大家不要介意)
我们使用一个抽象类,继承了Subscriber<T>,并且定义的成功和失败的回调方法,可以看到,当成功后,我们将数据返回,失败了,则告诉用户


五:统一的数据剥离


当flag==1的时候,说明请求数据了,我们则需要把数据的data部分抽取出来,否则,我们就弹出错误的信息,为什么说这个可以要也可以不要,因为有些时候,我们可能并不需要data部分,也有可能flag有其他的值,需要做不同的处理,所以这个还得看需求,如果我们不需要的时候,我们可以指定请求的线程在io线程,然后回调给主线程就可以了



到这里,基本的封装就完成了,现在我们来看看怎么用


首先我们需要定义一个接口:


这里的post代表的是post请求,@FormUrlEncoded是表单形式,post里面的是请求的地址,我这里只是示例,在开发中需要换成你自己的请求地址,然后就是一系列的请求参数,具体入参就要自己去换了

我们需要定义一个LoginApi,去发起网络请求,


通过刚刚的HttpApi中的getService返回对应的接口,并且调用doLogin方法,就可以了,这里注意一下,我现在使用的是不需要成功后就立刻转成实体类,仅仅只是将请求时放在io线程去处理,通过.compose这个操作符去实现,并且回调给RxSubscibe,我们来看看成功后立刻转成实体类是怎样,


可以看出来差别只是少了BaseEntity,这样的话,就没有办法拿到BaseEntity.getFlag()的方法,具体情况看需求

然后,我们在MainActivity中调用
首先我们需要new出Api,然后调用api的doLogin方法


这种是不需要立刻转成实体类,否则是这样的


好了,整个RxJava+Retrofit的二次封装就完成了

相关文章

网友评论

  • 雕刻的时光岁月:请问下在封装对话框报Can't create handler inside thread that has not called Looper.prepare(),这如何去处理
  • 麦田de守望:请问大神,你的这个封装是什么处理Rxjava的生命周期的?
  • 8ca711e21739:哥们不带demo下载的啊?
    ReturnYHH:@18767164463 不是的,看业务需求,这个只是单纯的线程转换而已,如果你的数据是统一的话,直接可以用rxhelper抽取,如果数据不统一,你就用这个转换回线程,然后自己去解析,有这个类是我有用,所以一起发上来
    8ca711e21739:@ReturnYHH 这个类好像没什么 用啊RxTransformer
    ReturnYHH:@18767164463 在那篇mvp模式有下载,这篇当时没有加入mvp,所以没有
  • 捡淑:能不能直接贴代码
    捡淑:@ReturnYHH :clap: :+1:
    ReturnYHH:@捡淑 不好意思,当初还不太会用简书,写的有点不太好,希望原谅
    ReturnYHH:@捡淑 在加入mvp模式的那篇有demo下载
  • cde86b15d3d6:这............

本文标题:基于RxJava和Retrofit的二次封装

本文链接:https://www.haomeiwen.com/subject/zzihmttx.html