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