Retrofit介紹
移動開發三劍客:Retrofit 2.0,RxJava(Android), OkHttp3.3
官方標語:A type-safe HTTP client for Android and Java
語意很明顯一款android安全類型的http客戶端
Retrofit是SQUARE美國一家移動支付公司最近新發布的在Android平臺上http訪問的開源項目,Retrofit與okhttp共同出自於Square公司,retrofit對okhttp做了一層封裝,把網絡請求都交給給了Okhttp,我們只需要通過簡單的配置就能使用retrofit來進行網絡請求了
Retrofit是一套RESTful架構的Android(Java)客戶端實現,基於註解,提供JSON to POJO(Plain Ordinary Java Object,簡單Java對象),POJO to JSON,網絡請求(POST,GET,PUT,DELETE等)封裝。
我對RESTful架構的理解是:
相當於設計一個函數,函數內部過程對客戶端不可見,客戶端只傳遞參數接受結果
Retrofit特點 :
- 底層使用OkHttp進行網絡傳輸,性能好,速度快
- 可以自動將REST API返回的數據轉化爲Java對象,且支持多種數據轉換格式(如json、xml等)
- 使用Java註解聲明HTTP請求
- 支持 Multipart請求和文件上傳
如何快速的上手Retrofit
1 首先在你的Grandle中引入Retrofit2.0
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
2 創建一個retrofit
Retrofit wzqRertofit = new Retrofit.Builder()
.baseUrl("http://192.168.10.155:80/")
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient()).build();
3 創建接口請求庫控制中心
public interface WebAPIService {
@FormUrlEncoded
@POST("WebService/")
Call<Webdata> getData(@Field("service") String first);
}
POST請求不要忘記加@FormUrlEncoded
4 調用API
Retrofit支持異步和同步,
call.enqueue()來採用異步請求
call.execute() 則採用同步方
WebAPIService apiService = wzqRertofit.create(WebAPIService.class);
Call<Webdata> call = apiService.getData("chick_app");
執行方法
Call<Webdata> callsub = call.clone();
callsub.enqueue(new Callback<Webdata>() {
@Override
public void onResponse(Call<Webdata> call, Response<Webdata> response) {
if (response.isSuccessful()) {
tvContent.setText(response.body().toString());
}
}
@Override
public void onFailure(Call<Webdata> call, Throwable t) {
}
});
爲什麼要加 call.clone()?
由於call只能被執行一次,所以按照上面的順序執行會得到如下錯誤。
java.lang.IllegalStateException: Already executed
我們可以通過clone,來克隆一份call,從新調用
jackLee(簡書作者)的一句話特別喜歡:
我們需要牢牢的記住:所有的第三方庫能實現的功能,我們使用原生的API只要花時間和精力也能實現,但是可能會出現很多的bug而且會花費較多的時間和精力,而且性能也不一定很好,第三方的庫會幫我們封裝底層的一些代碼,避免我們做重複多餘易出錯的事情,讓我們專注於業務邏輯,所以學習任何一個第三方庫都將是簡單的,我們不應心生畏懼。