Android网络框架之okhttp封装——下篇

Android网络框架之okhttp封装——下篇

排版不佳建议点击查看原文

回顾


Android网络框架之okhttp封装——下篇_第1张图片

在上篇中我们对okhttp的request和okhttpClient进行了封装,这次我们对最后一个部分,callback回调部分进行封装。

Callback封装


Android网络框架之okhttp封装——下篇_第2张图片

既然要对Callback回调进行封装,我当然需要定义自己的回调接口

DisposeDataListener,分别对应了Success和Failure,区别就是我们只接收封装好直接可以使用的对象Object,这样上层代码就无需直接和okhttp交互。

Android网络框架之okhttp封装——下篇_第3张图片

同样我们再创建了DisposeDataHandle类。因为我们在处理json回调的时候,我们要完成json对象到实例对象的转化,所以呢我们就需要一个将要转化成实体对象的字节码对象Class(字节码对象也可以称为类的类对象,java语言中万物皆对象,Class也是一个对象,此概念在java反射中常用)作为成员属性。DisposeDataHandle类的目的就是将我们的响应回调DisposeDataListener与我们即将要转化为json实体对象的Class进行了封装。

Android网络框架之okhttp封装——下篇_第4张图片

接下来我们要对异常信息也需要进行封装处理,应对我们请求失败的情况,首先创建了MyOkHttpException类,对异常的类型ecode,还有异常的详细信息emsg进行了封装,当发生异常时,我们得到的将会是一个MyOkHttpException对象,里面包含了我们所有的异常信息。

万事俱备,我们终于要回到主题上对回调Callback进行封装了:

Android网络框架之okhttp封装——下篇_第5张图片

要对Callback回调进行封装当然要实现okhttp的Callback接口,我们新建了5个常量全部是为了区分异常类型做准备的,在构造函数里需要接受我们封装好的DisposeDataHandle对象,这样响应回调DisposeDataListener与我们即将要转化为json实体对象的Class都有了。由于okhttp的Callback回调的时候是在子线程,我们还需要一个handler,当然我们是不能在子线程创建Handler的,通过Looper.getMainLoper函数使我们的handler创建在主线程。

Android网络框架之okhttp封装——下篇_第6张图片

接下来在两个okhttp回调方法中,如果onFailure请求失败,我们便回调我们自己的响应方法MyFailure,把异常信息封装到MyOkhttpException中让MyFailure打包带走。

如果请求成功,我们便获取到服务器给我们返回的数据,此时我们需要对其进行解析handleResponse()方法帮助我们完成了这一繁琐的任务。

数据解析


Android网络框架之okhttp封装——下篇_第7张图片

handleResponse()方法就像一个加工厂,我们提供材料json数据,handleResponse()方法帮助我们加工成一个实体对象。由于服务器有可能给我们返回空数据,对result的判断是不可少的。通过检验后,我们让json数据变成JSONObject对象,为解析做准备。此时如果用户没有给json创建Class实体对象那么我们是无法进行解析的,只好直接调用MySuccess把json数据返回。

当拥有JSONObject对象与json实体对象我们便可以用市面上各种json框架进行解析:gosn,fastJson等,这里我们使用了非常轻量级的json解析类ResponseEntityToModule(需要的可联系)完成了json到Object的转化。最后调用我们定义的接口方法MySuccess将Object返回给我们的上层代码。

初步封装完成


到这里我们的okhttp就初步封装完成了,我们来对比一下上篇的代码:

Android网络框架之okhttp封装——下篇_第8张图片
Android网络框架之okhttp封装——下篇_第9张图片

猛的一看我们把Callback换成封装后的CommonJsonCallback发现代码量比上篇还要多了不少,其实并不然,经过封装后我们整个网络请求并没有直接和okhttp打交道,实现了和okhttp分离,不管okhttp将来怎么改,我们应用层代码可以不变实现了解耦。在回调方法中,我们可以直接得到实体对象,无需再次对数据进行解析,直接使用。

欢迎长按下图-识别图中二维码或者扫一扫,搜索微信公众号:黄君华。关注我的公众号:

Android网络框架之okhttp封装——下篇_第10张图片

如果你有不同意见或建议或者有好的技术文章想和大家分享欢迎投稿,可以把你的文章使用附件的形式发送到我的邮箱[email protected]

谢谢阅读!

你可能感兴趣的:(Android网络框架之okhttp封装——下篇)