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

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 implements Serializable {
    //结果
    public int code;
    //数据
    public T data;
}

我们将数据的结果和数据分开了,数据我们用一个泛型,这样就可以匹配各种格式的数据了

然后,在要请求中,我们要这样写

public interface APIService {
    @GET("/service/getIpInfo.php")
    Call> getIpInfo2(@Query("ip") String ip);
}

Call>,我们在配置的时候,除了IpBean不同,其他的,都是一样的了,看,这样就可以解决我们一开始时候的那个问题了


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


教程例子源码下载


你可能感兴趣的:(Retrofit)