2018-05-24 遇到的一点小问题
项目里和服务端约定的返回数据基本就三种
{ "code": 0,"msg": "success","data": {}}
或
{"code": 0, "msg": "success","data": []}
或
{"code": 0, "msg": "success"}
code为0时才去处理data数据,code不为0时,按具体代码处理异常,整个项目都差不多。所有的接口都必须统一上传三个参数。
不想在项目里复制太多代码,所以把网络请求简单整理了一下。
这样网络请求时只需使用具体的解析类型就可以获取数据了,有多余的参数要上传就加上自定义的HashMap,有需要处理的异常就重写onError(xxx)方法就行。
ToolsHttp.post(context, url, new HttpCallback<InfoMineAccount>() {
@Override
public void onSuccess( InfoMineAccount data) {
}
});
上面是第一种数据处理;第二种就是HttpCallback<List<InfoMineAccount>>()
;第三种专门弄个HttpCallback,把type
设置为null
就可以了。虽然不清楚这样有没问题,但是省了很多复制代码的时间。
因为是使用的Gson
在Converter
类里统一解析数据,所以遇到服务端把java关键词当成Json数据的key时就会比较麻烦了。比如这样的{"code": 0,"msg": "success", "data": {"default": {}}}
,当然这种问题网上一找很多解决办法,就是在你自定义的数据上注解@SerializedName("xxx")
就可以了。
为什么网上一找很多解决办法,我还特地写一篇这个呢。因为今天改东西,看那句话,才隔了几个月就以为没用,给顺手删了,然后测试才发现出问题了。所以写一下加深记忆,顺便增加点简书字数。
再加点字数,感谢四木推荐的jeasonlzy/okhttp-OkGo。因为项目的
README.md
里有`Fiddler抓包和泛型的相关介绍,对项目还是有些帮助的。
网友评论