Androidネットワーク要求フレームワークRetrofit 2.

7145 ワード

AynchttpClient、Volly、Retrofitの3つの要求時間を比較する.
使用
一回だけお願いします
7つの要求
25のお願い
Aynchttp Client
941 ms
4539 ms
13957 ms
Volly
560 ms
2202 ms
4275 ms
Retrofit 2.
312 ms
889 ms
1059 ms
Retrofit 2.完勝
使用
依存を追加
build.gradle
comple‘comp.squareup.retrofit 2:retrofit:2.0-beta 4’
サンプルをお願いします
宝を洗う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:CoverterFactory変換工場
    得られたデータをJAVA BEANに変換してくれます.
    Retrofitは以下の変換をサポートします.
    Gson:come.squararareup.retrofit 2:converter-gson Jackson:cocome.squarup.retrap.retrfit 2:converter- jackson Moshi:come.squup.retrfit 2:converter- moshiProtbuf:come.squararup.retrtrap.retrtrtrap.retrtrtrtrap.retrap.retrtrap.retrap.retrtrap.retrfit t t t 2:contrtrtrtrtrtrtrtrtrap.retrtrtrtrtrtrap.retrtrtrtrtrtrap.retrap.retrap 2:conars(prmitives、boxd、and String):comp.squarep.retrofit 2:converter-scalars
    RetrofitここではGsonCoverterFactoryを例にしています.
    依存を追加
    comple‘comp.squareup.retrofit 2:converter-gson:2.0-beta 4’
    定義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")
    @FormUrlEncoded
    Call doLogin(@Body User user);
    
    //post    ,map,         
    @POST("url")
    @FormUrlEncoded
    Call 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);
    
    その他の資料
    公式資料Retrofit 2.0を使って要約とJSONObject Coveter Retrofit 2のソースコード解析を行います.