Retrofit初识

关于Retrofit Retrofit初识
文章图片
retrofit.png Retrofit是一个针对Android和Java的类型安全的Http客户端/请求工具
官网:http://square.github.io/retrofit/
Github:https://github.com/square/retrofit
Retrofit特性

  • 将HTTP的api转换为java接口,并生成默认的实现类。
  • 基于注解,使用注解描述HTTP请求。
  • 提供对象转换,JSON to POJO,POJO to JSON。
  • 支持回调操作,处理不同的结果。
    POJO:Plain Ordinary Java Object,简单Java对象。就是JavaBean
初步使用 添加依赖 在build.gradle文件中添加:
compile 'com.squareup.retrofit2:retrofit:2.1.0'

一般情况下,我们需要处理json格式的数据,那么需要一个转换器,添加:
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

PS:添加的依赖后面的版本号必须保持一致,这里都是2.1.0。
定义实体类 测试用的api:
http://ip.taobao.com/service/getIpInfo.php?ip=
public class IpInfo { private int code; private DataBean data; public int getCode() { return code; }public void setCode(int code) { this.code = code; }public DataBean getData() { return data; }public void setData(DataBean data) { this.data = https://www.it610.com/article/data; }public static class DataBean { private String country; private String country_id; private String area; private String area_id; private String region; private String region_id; private String city; private String city_id; private String county; private String county_id; private String isp; private String isp_id; private String ip; public String getCountry() { return country; }public void setCountry(String country) { this.country = country; }public String getCountry_id() { return country_id; }public void setCountry_id(String country_id) { this.country_id = country_id; }public String getArea() { return area; }public void setArea(String area) { this.area = area; }public String getArea_id() { return area_id; }public void setArea_id(String area_id) { this.area_id = area_id; }public String getRegion() { return region; }public void setRegion(String region) { this.region = region; }public String getRegion_id() { return region_id; }public void setRegion_id(String region_id) { this.region_id = region_id; }public String getCity() { return city; }public void setCity(String city) { this.city = city; }public String getCity_id() { return city_id; }public void setCity_id(String city_id) { this.city_id = city_id; }public String getCounty() { return county; }public void setCounty(String county) { this.county = county; }public String getCounty_id() { return county_id; }public void setCounty_id(String county_id) { this.county_id = county_id; }public String getIsp() { return isp; }public void setIsp(String isp) { this.isp = isp; }public String getIsp_id() { return isp_id; }public void setIsp_id(String isp_id) { this.isp_id = isp_id; }public String getIp() { return ip; }public void setIp(String ip) { this.ip = ip; } } }

定义服务接口
public interface GetIpService { @GET("service/getIpInfo.php") Call getIpInfo(@Query("ip") String ip); }

注解:
@GET 是get的请求方式
@Query 是接口地址?后面带的关键字
构造Retrofit 封装了单例,使用了枚举单例的方式:
public enum RetrofitWrapper { intance; private Retrofit retrofit; private final String baseUrl = "http://ip.taobao.com/"; RetrofitWrapper(){ retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); }public T cerate(Class service){ return retrofit.create(service); } }

调用
public void getIpInfo() { GetIpService getIpService = RetrofitWrapper.intance.cerate(GetIpService.class); Call ipInfoCall = getIpService.getIpInfo("183.206.169.144"); ipInfoCall.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { IpInfo ipInfo = response.body(); //打印ip所在城市 Log.i("vergo", "=====ip city====="+ipInfo.getData().getCity()); }@Override public void onFailure(Call call, Throwable t) {} }); }

取消/终止请求
ipInfoCall.cancle();

【Retrofit初识】至此,初步的使用Retrofit请求已经完成。
后续会整理更详细的进阶用法
  • 注解的使用,@GET,@POST,@FormUrlEncoded,@Multipart等
  • 自定义Converter用法
  • OkHttp配合Retrofit使用
  • Retrofit 与 RxJava 结合使用

    推荐阅读