组件化封装思想实战Android App总结二App公共模块之网络请求组件二

241 篇文章 5 订阅

一、网络请求组件Response封装

1、listener包中的两个类

接口DisposeDataListener。在callback中定义了两个方法,一个是onSuccess()一个是onFailure(),而这个接口中又定义了两个重名的方法,是为什么?

首先第一点,如果直接使用okhttp的callback中的方法的话,万一有一天okhttp觉得这两个方法的名字起得不太好,想重新修改名字的话,那么就遭殃了,在代码中所有需要回调的地方都需要修改方法的名字。即使全局搜索、替换也存在风险。第二点是不利于进行扩展,例如下载时是需要监听下载进度的,例如progress需要定义一个DisposeDataListener来关注到所关注的所有事件。这里只对json进行处理,所以只关注这两个方法。后面用到onProgress监听的时候再去扩展它。

2、DisposeDataHandle

在处理json回调的时候,要完成json对象到实例对象的一个转化,所以就需要要转化对象的一个字节码对象。DisposeDataHandle就是将回调DisposeDataLisener和需要转换成的字节码对象进行了一个封装。相当于它有两个方法,一个方法的参数只有Listener,另一个有listener和class字节码对象。它其实就相当于对callback的处理。

3、CommonJsonCallback

专门处理JSON的回调响应

首先定义了一些常量,RESULT_CODE、RESULT_CODE_VALUE、ERROR_MSG、EMPTY_MSG,这些是与服务器响应相对应的一些字段,比如这里用到的一些字段有ecode、emsg、edata,edata里面就是真正的数据,而ecode和emsg就是服务器返回给我们的code码和msg信息,成功的话就不需要读msg信息,不成功的话需要读异常信息,告诉我们具体是什么异常。

 

NETWORK_ERRO是服务器返回异常,JSON_ERRO是json解析的一些异常,OTHER_ERRO是其它的一些异常,Handler用于进行消息的转发,将子线程的数据转到主线程,DisposeDataListener是回调,Class是需要转为为的字节码对象。其它两个是请求失败的处理和请求成功的处理回调

4、请求失败异常

如果请求失败,需要将异常抛到应用层,应用层最终可能需要根据不同的异常类型做不同的处理。通过deliveryhandler的post方法将异常抛到主线程中,通过调用listener将异常通知到应用层。异常类型是NETWORK_ERRO,异常就是所抛出的异常

 

注:有时候需要定义一些自定义的异常,只需要继承Exception类,定义异常码和异常消息就可以了。异常码ecode是最重要的,需要根据异常码判断异常类型。有时候需要获取异常消息,如果需要其它信息,可以继续添加

 

5、处理服务器的响应

既然是json的处理,返回来的是字符串,从response中获取。获取到字符串后传入到主线程中。

 

 

以下是服务器返回码是正确的,服务器有返回数据所进行的处理

 

 

下面是服务器返回出错时所进行的处理。如果出现异常,则也直接将异常抛出去

 

 

handleResponse方法的处理逻辑

首先冲响应中拿到响应信息,然后将响应信息拿到handleResponse中。handleResponse中会根据拿到的对象,首先判断对象是否为空或者是否为空字符串,如果是则直接抛出NETWORK_ERRO异常,直接在应用层做处理。否则则认为消息是有的,尝试进行解析。解析的时候看一下响应码是否为0,如果是0表明服务器正常响应了,如果正常响应了还要判断class对象是否为空,如果为空的话表明不需要解析,直接返回数据到应用层。如果不为空,则表明需要我们将数据转为class对象,如果转换结果不为空,则直接将正确的数据返回回去,否则,转换出错,依然认为返回的数据不合法,返回应用层一个JSON_ERROR异常。如果服务器返回码压根就不正确,直接将异常返回应用层做处理即可。为了成行的健壮性,当程序catch到任何异常的时候,也将异常返回到应用层做处理,表明此次请求失败。

 

6、commonOkHttpClient中的callback使用自定义的CommonJsonCallback

 

7、在测试时也需要传入自定义的callback,并将disposeDataHandle和DisposeDataListener作为参数传入进去。

这样无论以后第三方代码换成什么,都不需要所有的地方都进行修改。这套代码没有涉及到okhttp及第三方代码。除非我们自己需要扩展或其它封装。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值