比较AsyncHttpClient 、Volley、Retrofit三者的请求时间

使用 单次请求 7个请求 25个请求
AsyncHttpClient 941ms 4539ms 13957ms
Volley 560ms 2202ms 4275ms
Retrofit2.0 312ms 889ms 1059ms

Retrofit2.0 完胜

使用

添加依赖

build.gradle

compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta4’

请求范例

以淘宝的ip库请求为例

  • 地址:http://ip.taobao.com/service/getIpInfo.php
  • 请求参数:ip
  • 请求方法: get

声明接口

public interface ApiControl {    //@Query注解的作用理解为查询条件,这里表示需要查询的字段为ip    //ResponseBody是Retrofit自带的返回类,    @GET("http://ip.taobao.com/service/getIpInfo.php")    Call getIpInfo(@Query("ip") String ip);}

调用接口

//创建Retrofit实例Retrofit retrofit = new Retrofit.Builder()        //当我们的@GET()里有url时,这个baseUrl无效。但是这个必须要填,不然会报错,神奇。        .baseUrl("http://www.taobao.com.cn/")        .build();ApiControl apiStores = retrofit.create(ApiControl.class);Call call = apiStores.getIpInfo("220.160.193.209");//在主线程里,异步调用。call.enqueue(new Callback() {    @Override    public void onResponse(Response response) {        try {            Log.i("onResponse", "response=" + response.body().string());        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void onFailure(Throwable t) {        Log.i("onFailure", "onFailure=" + t.getMessage());    }});

同步调用

try {    Response response = call.execute();} catch (IOException e) {    e.printStackTrace();}

进阶使用1:ConverterFactory转换工厂

可以帮我们将获取到的数据转换为JAVA BEAN

Retrofit支持以下转换

Gson: com.squareup.retrofit2:converter-gson
Jackson: com.squareup.retrofit2:converter-jackson
Moshi: com.squareup.retrofit2:converter-moshi
Protobuf: com.squareup.retrofit2:converter-protobuf
Wire: com.squareup.retrofit2:converter-wire
Simple XML: com.squareup.retrofit2:converter-simplexml
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

Retrofit这里以GsonConverterFactory的为例

添加依赖

compile ‘com.squareup.retrofit2:converter-gson:2.0.0-beta4’

定义java bean

/** * Created by xemenes on 25/03/16. */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 = 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;        }    }}

接口方法声明

//GSON转换数据@GET("http://ip.taobao.com/service/getIpInfo.php")Call getIpInfo2(@Query("ip") String ip);

调用接口

Call ipInfoCall = apiStores.getIpInfo2("220.160.193.207");ipInfoCall.enqueue(new Callback() {    @Override    public void onResponse(Response response) {        Log.d("onResponse",response.body().getData().getCity());    }    @Override    public void onFailure(Throwable t) {        Log.i("onFailure", "onFailure=" + t.getMessage());            }});

进阶使用2: 常用接口范例声明

//这里url为请求地址//多参数,用map,注解用@QueryMap@GET("url")Call getInfo(@QueryMap Map params);//post的请求参数是放在请求体中的,就是body内(详见http请求),这是以json格式传递参数的@POST("url")@FormUrlEncodedCall doLogin(@Body User user);//post表单传递,map,就是我们一般用到的@POST("url")@FormUrlEncodedCall doLogin(@FieldMap Map params);//也是post表单传递,是以单个进行传递@FormUrlEncoded@POST("url")Call doLogin(@Field("username") String name, @Field("password") String password);//请求头更改@FormUrlEncoded@Headers({"Accept: application/vnd.github.v3.full+json",        "User-Agent: Retrofit-Sample-App"})Call getUserInfo();//动态改变请求头@GET("/user")Call getUser(@Header("Authorization") String authorization);

其他资料

官方资料
Retrofit2.0 使用归纳和 JSONObject Conveter
Retrofit2 源码解析

更多相关文章

  1. JNI之------C调用java接口
  2. 【Android】Web开发之通过Apache接口处理Http请求
  3. 【Android】简单的接口回调
  4. Android高手进阶教程(二十一)---Android WebView的缓存!!!
  5. Android 进阶/面试 重难点
  6. 【APP】微信接口对Android与IOS验证方式的差异

随机推荐

  1. Kotlin 写 Android(安卓)单元测试(二),JUnit
  2. Android平台开发-Android(安卓)HAL devel
  3. 利用HTML5开发Android应用程序 PPT
  4. android蓝牙BLE(一) —— 扫描
  5. Android的常用基本控件ImageView、ListVi
  6. Android(安卓)主题切换/换肤方案 研究(一
  7. Android——SQLite使用
  8. 我的Android第一步
  9. android四大组件学习总结
  10. Android学习―LinearLayout布局中实现左