Android 網絡請求庫:Retrofit
Retrofit
特點
- 性能最好,處理最快
- 使用REST API時非常方便;
- 傳輸層默認就使用OkHttp;
- 支持NIO;
- 擁有出色的API文檔和社區支持
- 速度上比volley更快;
- 如果你的應用程序中集成了OKHttp,Retrofit默認會使用OKHttp處理其他網絡層請求。
- 默認使用Gson </ol>
- POST
- 異步請求
使用
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的調用同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) { } });
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!