Android网络开发框架Retrofit(三:进阶篇,接口实体类封装)

来源:互联网 发布:背叛了男朋友 知乎 编辑:程序博客网 时间:2024/06/06 00:04

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不同,其他的,都是一样的了,看,这样就可以解决我们一开始时候的那个问题了


本次教程到此结束,欢迎大家评论


教程例子源码下载


0 0
原创粉丝点击