Android网络开发框架Retrofit(三:进阶篇,接口实体类封装)
看了前两节后,相信大家对Retrofit有了初步的认识了,有的童鞋可能碰到了这样的一个问题,就是要请求的数据中,可能带有错误码的,以前的做法是先获取出错误码,然后通过对错误码的判断来进行下一步的操作,但Retrofit的做法好像不太理想,所以,今天就针对这个问题提出一个解决方案
我们先来看一个请求的数据 http://ip.taobao.com/service/getIpInfo.php?ip=121.33.6.228
{
"code": 0,
"data": {
"country": "中国",
"country_id": "CN",
"area": "华南",
"area_id": "800000",
"region": "广东省",
"region_id": "440000",
"city": "广州市",
"city_id": "440100",
"county": "荔湾区",
"county_id": "440103",
"isp": "电信",
"isp_id": "100017",
"ip": "121.33.6.228"
}
}
看得出,上面的数据中,带了一个错误码,然后才是数据,我们的实体类不可能都这样设计吧,所以解析起来就会有问题了,那么解决方案是怎么样呢
我想出一个解决方案就是,通常接口的错误码和数据是分开的,错误码格式都基本一样的,而数据格式却变化不同,所以我们可以写个公共的错误码实体类,然后将数据的实体类分开,再合并起来,形成一个新的实体类,那么是怎样的呢,看下面
/**
* API实体类
* 使用泛型进行封装,将请求的结果和数据隔离开,这样,就可以更多类型的数据格式,统一做处理
*
* @author ysbing
*/
public class ApiBean<T> implements Serializable {
//结果
public int code;
//数据
public T data;
}
我们将数据的结果和数据分开了,数据我们用一个泛型,这样就可以匹配各种格式的数据了
然后,在要请求中,我们要这样写
public interface APIService {
@GET("/service/getIpInfo.php")
Call<ApiBean<IpBean>> getIpInfo2(@Query("ip") String ip);
}
Call<ApiBean<IpBean>>,我们在配置的时候,除了IpBean不同,其他的,都是一样的了,看,这样就可以解决我们一开始时候的那个问题了
本次教程到此结束,欢迎大家评论