移動開發三劍客 -Retrofit

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特點 :

  1. 底層使用OkHttp進行網絡傳輸,性能好,速度快
  2. 可以自動將REST API返回的數據轉化爲Java對象,且支持多種數據轉換格式(如json、xml等)
  3. 使用Java註解聲明HTTP請求
  4. 支持 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而且會花費較多的時間和精力,而且性能也不一定很好,第三方的庫會幫我們封裝底層的一些代碼,避免我們做重複多餘易出錯的事情,讓我們專注於業務邏輯,所以學習任何一個第三方庫都將是簡單的,我們不應心生畏懼。

原文鏈接:http://www.jianshu.com/p/1ef0ba0bccc6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章