美文网首页Android知识Android开发经验谈Android开发
Android网络框架之okhttp封装——下篇

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

作者: 君华_Joshua | 来源:发表于2017-07-22 11:03 被阅读329次

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

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

回顾


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

Callback封装


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

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

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

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

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

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

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

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

数据解析


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

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

初步封装完成


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

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

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

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

谢谢阅读!

相关文章

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

    Android网络框架之okhttp封装——下篇 排版不佳建议点击查看原文 回顾 在上篇中我们对okhttp的re...

  • Android网络框架之okhttp封装——上篇

    Android网络框架之okhttp封装——上篇 排版不佳建议点击查看原文 问题提出 众所周知Android系统提...

  • Android OKHttp的基本使用

    一、 Android中网络请求是必不可少的。OkHttp是网络框架界的大佬了,很多网络框架都基于OkHttp封装。...

  • Okhttp3-基本用法

    前言 Okhttp官网Okhttp-Github android网络框架之OKhttp一个处理网络请求的开源项目,...

  • Okhttp(Kotlin版)流程解读

    OkHttp是主流的网络请求框架,Android网络请求基本的项目封装也是有Rxjava+Retrofit+Okh...

  • 探索Android开源框架 - 2. Retrofit使用及源码

    Retrofit是目前Android最优秀的网络封装框架,是对OkHttp网络请求库的封装 App应用程序通过Re...

  • OKHTTP的使用

    OKHTTP的使用 android网络框架之OKhttp 一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,...

  • ConnectionSpec

    OkHttp okhttp是Android 平台的网络请求框架,已经被Android吸收了。并且OkHttp很好的...

  • Retrofit 源码分析

    前言 现代Android开发中,Retrofit是主流的网络请求框架,内部封装OkHttp发起请求,也是声明式Ht...

  • OkHttp3原理浅析<一>

    OkHttp是现在Android使用最频繁的网络请求框架.Retrofit也是使用OKHttp的网络框架。现在来看...

网友评论

    本文标题:Android网络框架之okhttp封装——下篇

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