Android 網絡請求庫:Retrofit

jopen 9年前發布 | 145K 次閱讀 Retrofit Android開發 移動開發

Retrofit

特點

  1. 性能最好,處理最快
  2. 使用REST API時非常方便;
  3. 傳輸層默認就使用OkHttp;
  4. 支持NIO;
  5. 擁有出色的API文檔和社區支持
  6. 速度上比volley更快;
  7. 如果你的應用程序中集成了OKHttp,Retrofit默認會使用OKHttp處理其他網絡層請求。
  8. 默認使用Gson
  9. </ol>

    使用

    Retrofit支持同步和異步兩種方式,在使用時,需要將請求地址轉換為接口,通過注解來指定請求方法,請求參數,請求頭,返回值等信息。還是使用之前的person的那段json值,get請求到服務器后從數據庫查詢數據,返回值為查詢到的數據,post請求向服務器提交一條數據,返回值為提交的數據。
    首先完成請求所用的service,是一個interface,完全通過注解完成配置

    import retrofit.Callback;
    import retrofit.http.Field;
    import retrofit.http.FormUrlEncoded;
    import retrofit.http.GET;
    import retrofit.http.Headers;
    import retrofit.http.POST;
    import retrofit.http.Path;
    import retrofit.http.Query;
    
    /**
     * Created by lizhangqu on 2015/5/11.
     */
    public interface PersonService {
        @Headers({
                "Cache-Control: max-age=640000",
                "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
        })
        //通過注解設置請求頭
        @GET("/{test}/rest.php")
        //設置請求方法為get,相對路徑為注解內內容,其中{test}會被@Path注解指定內容替換
        Person getPerson(@Path("test") String dir,@Query("name") String name);
        //@Query用于指定參數
    
        @FormUrlEncoded
        //urlencode
        @POST("/test/rest1.php")
        //post提交
        Person updatePerson(@Field("name") String name,@Field("age") int age);
        //@Field提交的域
    
    
        @POST("/test/rest1.php")
        void updatePerson(@Field("name") String name,@Field("age") int age, Callback<Person> callback);
        //異步回調,不能指定返回值
    }

    GET
    使用時,通過RestAdapter的實例獲得一個接口的實例,其本質是動態代理,注意含有返回值的方法是同步的,不能UI線程中調用,應該在子線程中完成
    RestAdapter restAdapter = new RestAdapter.Builder()
                            .setEndpoint("http://121.41.119.107")
                            .build();
                    PersonService personService=restAdapter.create(PersonService.class);
                    Person person=personService.getPerson("test","zhangsan");
                    Log.d("TAG",person.toString());

    • POST

    POST的調用同Get,獲得adapter后獲得一個代理對象,然后通過這個代理對象進行網絡請求

    Person person1=personService.updatePerson("lizhangqu", 12);
    Log.d("TAG",person1.toString());

    • 異步請求

    如果要使用異步請求,需要將接口中的方法返回值修改會void,再加入回調參數Callback,就如PersonService中第三個方法一樣,請求完成后會回調該callback對象的success或者fail方法。

    RestAdapter restAdapter = new RestAdapter.Builder()
                    .setEndpoint("http://121.41.119.107")
                    .build();
            PersonService personService=restAdapter.create(PersonService.class);
            personService.updatePerson("lizhangqu",23, new Callback<Person>() {
                @Override
                public void success(Person person, Response response) {
                    Log.d("TAG", person.toString());
                }
    
                @Override
                public void failure(RetrofitError error) {
    
                }
            });

    項目主頁:http://www.baiduhome.net/lib/view/home/1435381942341

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!