Android Retrofit 2.5.0使用基礎詳解

darryrzhong發表於2019-03-28

前言

  • 在Andrroid開發中,網路請求必不可少
  • 而在Android所有網路請求庫中,Retrofit是最受開發者歡迎的一個網路請求庫

retrofit:2.5.0 官方文件

retrofit:2.5.0 - github

簡介

  • Retrofit是Square公司開發的一款針對Android網路請求的框架,遵循Restful設計風格,底層基於OkHttp.

功能

  • 支援同步/非同步網路請求
  • 支援多種資料的解析&序列化格式(Gson、json、XML等等)
  • 通過註解配置網路請求引數
  • 提供對Rxjava的支援
  • 高度解耦,使用方便

對比其他網路請求框架

  • 效能最好,速度最快
  • 高度封裝導致擴充套件性差
  • 簡潔易用,程式碼簡化
  • 解耦徹底,職責細分
  • 易與其他框架聯用(Rxjava)

使用場景

  • 任何場景下建議優先使用

網路請求流程

  • App應用程式通過 Retrofit 請求網路,實際上是使用 Retrofit 介面層封裝請求引數、Header、Url 等資訊,之後由 OkHttp 完成後續的請求操作
  • 在服務端返回資料之後,OkHttp 將原始的結果交給 Retrofit,Retrofit根據使用者的需求對結果進行解析

請求流程

具體使用

1.新增Retrofit庫的依賴

dependencies {
      implementation 'com.squareup.retrofit2:retrofit:2.5.0'
     api 'com.squareup.retrofit2:converter-gson:2.0.2'
}
複製程式碼

2. 新增 網路許可權

<uses-permission android:name="android.permission.INTERNET"/>
複製程式碼

3. 建立 裝載伺服器返回資料 的類

public class ResultData{
    ...
    // 根據返回資料的格式和資料解析方式(Json、XML等)定義

        }

複製程式碼

4. 建立 用於配置網路請求 的介面

  • Retrofit將 Http請求 抽象成 Java介面:採用 註解 描述網路請求引數 和配置網路請求引數
public interface GetRequestInterface {

    @GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")
    Call<ResultData>  getCall();
    // @GET註解的作用:採用Get方法傳送網路請求
 
    // getCall() = 接收網路請求資料的方法
    // 其中返回型別為Call<*>,*是接收資料的類(即上面定義的Translation類)
    // 如果想直接獲得Responsebody中的內容,可以定義網路請求返回值為Call<ResponseBody>
}
複製程式碼

註解說明

  • 網路請求方法:@GET、@POST、@PUT、@DELETE、@HEAD(常用)
  • 網路請求標記: @FormUrlEncoded、@Multipart、@Streaming
  • 網路請求引數: @Header &、@Headers、 @Body、@Field 、 @FieldMap、@Part 、 @PartMap、@Query、@QueryMap、@Path、@Url

具體作用以及解釋請自行前往官方文件檢視,這裡就不一一解釋了

5. 建立 Retrofit 例項

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fanyi.youdao.com/") // 設定網路請求的公共Url地址
                .addConverterFactory(GsonConverterFactory.create()) // 設定資料解析器
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 支援RxJava平臺
                .build();
複製程式碼
  • 資料解析器說明 Retrofit支援多種資料解析方式,使用時需要在Gradle新增依賴

資料解析器 Gradle依賴

Gson com.squareup.retrofit2:converter-gson:2.0.2


Jackson com.squareup.retrofit2:converter-jackson:2.0.2

Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2


Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2


Moshi com.squareup.retrofit2:converter-moshi:2.0.2

Wire com.squareup.retrofit2:converter-wire:2.0.2


Scalars com.squareup.retrofit2:converter-scalars:2.0.2

  • 網路介面卡說明 Retrofit支援多種網路請求介面卡方式:guava、Java8和rxjava Android 提供預設的 CallAdapter,不需要新增網路請求介面卡的依賴,若要使用其他網路介面卡,則需要按照需求在Gradle新增依賴

網路請求介面卡 Gradle依賴

guava com.squareup.retrofit2:adapter-guava:2.0.2

Java8 com.squareup.retrofit2:adapter-java8:2.0.2


rxjava com.squareup.retrofit2:adapter-rxjava:2.0.2

6.建立 網路請求介面例項

// 建立 網路請求介面 的例項
        GetRequestInterface request = retrofit.create(GetRequestInterface.class);

        //對 傳送請求 進行封裝
        Call<ResultData> call = request.getCall();
複製程式碼

7. 發起網路請求(非同步 / 同步)

/傳送網路請求(非同步)
        call.enqueue(new Callback<ResultData>() {
            //請求成功時回撥
            @Override
            public void onResponse(Call<ResultData> call, Response<ResultData> response) {
                //處理結果
         
            }

            //請求失敗時候的回撥
            @Override
            public void onFailure(Call<ResultData> call, Throwable throwable) {
             //提示失敗
            }
        });

// 傳送網路請求(同步)
Response<ResultData> response = call.execute();
複製程式碼

8. 處理返回資料

//傳送網路請求(非同步)
        call.enqueue(new Callback<ResultData>() {
            //請求成功時回撥
            @Override
            public void onResponse(Call<ResultData> call, Response<ResultData> response) {
                // 對返回資料進行處理
                response.body();//拿到ResultData物件進行資料操作
            }

            //請求失敗時候的回撥
            @Override
            public void onFailure(Call<ResultData> call, Throwable throwable) {
                System.out.println("連線失敗");
            }
        });

// 傳送網路請求(同步)
  Response<ResultData> response = call.execute();
  // 對返回資料進行處理
  response.body().blabla;

複製程式碼

總結

  • Retrofit 是一個 restful 的 HTTP 網路請求框架的封裝。
  • 網路請求的工作本質上是 OkHttp 完成,而 Retrofit 僅負責 網路請求介面的封裝
  • App應用程式通過 Retrofit 請求網路,實際上是使用 Retrofit 介面層封裝請求引數、Header、Url 等資訊,之後由 OkHttp 完成後續的請求操作
  • 在服務端返回資料之後,OkHttp 將原始的結果交給 Retrofit,Retrofit根據使用者的需求對結果進行解析
  • 相對其他開源庫而言程式碼簡潔使用更加方便.

關於Retrofit 2.5的簡單介紹到這裡就結束了,感謝閱讀.

參考文章:

歡迎關注作者darryrzhong,更多幹貨等你來拿喲.

請賞個小紅心!因為你的鼓勵是我寫作的最大動力!

更多精彩文章請關注

相關文章