一个基于Xutils3的网络封装
用过xutils的朋友都知道网络请求的回调是在实现了Callback.CommonCallBack<T>接口;然后通过实现onSuccess(),onError(),onFinished(),onCancelled()方法来处理返回的结果;首先看下后台给的数据结构。如下图所示这是我们后台固定的一个数据结构。Msg是用于判断成功还是失败的描述信息,Data是我们要获取的具体内容,Code表示返回的一个处理码
首先处理封装Callback.CommonCallBack<>接口,要处理成功以后返回的msg,和处理失败以后返回的msg。首先实现Callback.CommonCallback<String>接口 在返回的onSuncess(String result)的方法里面把回调的result转为jsonobject对象,在通过json解析转成对象,并且把通过code校验把这个对象通过Handler发射出去,在onError里面一样发送错误请求的message,统一在外层回调处理。这样的话我们的构造参数就需要3个了,第一个用于gson解析得到对象,第二个用于发送成功失败得到的数据,第三个是在哪个what里面执行(错误的object在what+1里面进行处理)。
如上所示,我们就可以自己在实现hander以后自己外层处理网络请求。这样封装的话也会有点问题就是如果有外层的acivity类finish()以后,如果我们的message还没取出来,message就持有handler的引用,handler就会持有当前acivity的引用,得不到释放,容易发生内存泄露,所以我们可以用弱引用给handler在加一层封装防止内存泄露
综合应用 如下图所示 用Ok的话也可以按照这样的模式在封装一次