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


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


教程例子源码下载


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值