這是一份很詳細的 Retrofit 2.0 使用教程(含實例講解)

前言

  • Andrroid開發中,網絡請求十分經常使用
  • 而在Android網絡請求庫中,Retrofit是當下最熱的一個網絡請求庫

Github截圖

  • 今天,我將獻上一份很是詳細Retrofit v2.0的使用教程,但願大家會喜歡。

 

目錄

目錄

1. 簡介

Retrofit簡介

特別注意:java

  • 準確來講,Retrofit 是一個 RESTful 的 HTTP 網絡請求框架的封裝。
  • 緣由:網絡請求的工做本質上是 OkHttp 完成,而 Retrofit 僅負責 網絡請求接口的封裝

本質過程

  • App應用程序經過 Retrofit 請求網絡,其實是使用 Retrofit 接口層封裝請求參數、Header、Url 等信息,以後由 OkHttp 完成後續的請求操做
  • 在服務端返回數據以後,OkHttp 將原始的結果交給 Retrofit,Retrofit根據用戶的需求對結果進行解析

2. 與其餘開源請求庫對比

除了Retrofit,現在Android中主流的網絡請求框架有:android

  • Android-Async-Http
  • Volley
  • OkHttp

下面是簡單介紹:git

網絡請求加載 - 介紹

一圖讓你瞭解所有的網絡請求庫和他們之間的區別!github

網絡請求庫 - 對比

附:各個主流網絡請求庫的Github地址服務器

3. 使用介紹

使用 Retrofit 的步驟共有7個:網絡

步驟1:添加Retrofit庫的依賴 
步驟2:建立 接收服務器返回數據 的類 
步驟3:建立 用於描述網絡請求 的接口 
步驟4:建立 Retrofit 實例 
步驟5:建立 網絡請求接口實例 並 配置網絡請求參數 
步驟6:發送網絡請求(異步 / 同步)框架

 

步驟7: 處理服務器返回的數據異步

接下來,咱們一步步進行講解。async

步驟1:添加Retrofit庫的依賴

1. 在 Gradle加入Retrofit庫的依賴oop

 

build.gradle

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 添加 網絡權限 
AndroidManifest.xml

 
  • 1

步驟2:建立 接收服務器返回數據 的類

Reception.java

 
  • 1
  • 2
  • 3
  • 4
  • 5

步驟3:建立 用於描述網絡請求 的接口

  • Retrofit將 Http請求 抽象成 Java接口:採用 註解 描述網絡請求參數 和配置網絡請求參數  
    1.  
    2.  


GetRequest_Interface.interface

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

下面詳細介紹Retrofit 網絡請求接口 的註解類型。

註解類型

註解類型

註解說明

第一類:網絡請求方法

網絡請求方法註解

詳細說明: 
a. @GET、@POST、@PUT、@DELETE、@HEAD 
以上方法分別對應 HTTP中的網絡請求方式

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此處特地說明URL的組成:Retrofit把 網絡請求的URL 分紅了兩部分設置:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 網絡請求的完整 Url =在建立Retrofit實例時經過.baseUrl()設置 +網絡請求接口的註解設置(下面稱 「path「 ) 
  • 具體整合的規則以下:

URL整合規則

 

b. @HTTP

  • 做用:替換@GET、@POST、@PUT、@DELETE、@HEAD註解的做用 及 更多功能拓展
  • 具體使用:經過屬性method、path、hasBody進行設置
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

第二類:標記

標記類註解

a. @FormUrlEncoded

  • 做用:表示發送form-encoded的數據

 

b. @Multipart

 


  • 做用:表示發送form-encoded的數據(適用於 有文件 上傳的場景) 

 


 

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

第三類:網絡請求參數

網絡請求參數註解

詳細說明

a. @Header & @Headers

  • 做用:添加請求頭 &添加不固定的請求頭
  • 具體使用以下:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

b. @Body

 


  • 做用:以 Post方式 傳遞 自定義數據類型 給服務器
  • 特別注意:若是提交的是一個Map,那麼做用至關於 @Field 

 

 

 
  • 1
  • 2
  • 3

c. @Field & @FieldMap

  • 做用:發送 Post請求 時提交請求的表單字段
  • 具體使用:與 @FormUrlEncoded 註解配合使用
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

d. @Part & @PartMap

  • 做用:發送 Post請求 時提交請求的表單字段

     

  • 具體使用:與 @Multipart 註解配合使用

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

e. @Query和@QueryMap

  • 做用:用於 @GET 方法的查詢參數(Query = Url 中 ‘?’ 後面的 key-value)

     

  • 具體使用:配置時只須要在接口方法中增長一個參數便可:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

f. @Path

  • 做用:URL地址的缺省值
  • 具體使用:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

g. @Url

  • 做用:直接傳入一個請求的 URL變量 用於URL設置
  • 具體使用:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

彙總

彙總

步驟4:建立 Retrofit 實例

 
  • 1
  • 2
  • 3
  • 4
  • 5

a. 關於數據解析器(Converter)

  • 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

b. 關於網絡請求適配器(CallAdapter)

  • Retrofit支持多種網絡請求適配器方式:guava、Java8和rxjava 

     

  • 使用時須要在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

步驟5:建立 網絡請求接口實例

 
  • 1
  • 2
  • 3
  • 4
  • 5

步驟6:發送網絡請求(異步 / 同步)

 

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

步驟7:處理返回數據

經過response類的 body()對返回的數據進行處理

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

4. 實例講解

接下來,我將用兩個實例分別對 Retrofit GET方式 和 POST方式進行 網絡請求 講解。

4.1 實例1

  • 實現功能:將中文翻譯成英文
  • 實現方案:採用Get方法對 金山詞霸API 發送網絡請求 

     


金山詞典

  • 步驟說明

步驟1:添加Retrofit庫的依賴 
步驟2:建立 接收服務器返回數據 的類 
步驟3:建立 用於描述網絡請求 的接口 
步驟4:建立 Retrofit 實例 
步驟5:建立 網絡請求接口實例 並 配置網絡請求參數 
步驟6:發送網絡請求(採用最經常使用的異步方式)

 

步驟7: 處理服務器返回的數據

接下來,咱們一步步進行講解。

  • 具體使用

步驟1:添加Retrofit庫的依賴

1. 在 Gradle加入Retrofit庫的依賴

 

build.gradle

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 添加 網絡權限 
AndroidManifest.xml

 
  • 1

步驟2:建立 接收服務器返回數據 的類

  • 金山詞霸API 的數據格式說明以下:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

API格式說明

  • 根據 金山詞霸API 的數據格式,建立 接收服務器返回數據 的類:

Translation.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

步驟3:建立 用於描述網絡請求 的接口

採用 註解 描述 網絡請求參數。 
GetRequest_Interface.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接下來的步驟均在GetRequest.java內實現(看註釋)

步驟4:建立Retrofit對象 
步驟5:建立 網絡請求接口 的實例 
步驟6:發送網絡請求

 

步驟7:處理返回數據

GetRequest.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

因爲此處採用了 Gson 解析,因此須要在 Gradle加入依賴 
build.gradle

 
  • 1

運行結果

運行結果

Demo地址

Carson_Ho的Github:https://github.com/Carson-Ho/RetrofitDemo

4.2 實例2

  • 實現的功能:將 英文 翻譯成 中文
  • 實現方法:採用Post方法對 有道API 發送網絡請求 

     


有道翻譯

  • 使用步驟

步驟1:添加Retrofit庫的依賴 
步驟2:建立 接收服務器返回數據 的類 
步驟3:建立 用於描述網絡請求 的接口 
步驟4:建立 Retrofit 實例 
步驟5:建立 網絡請求接口實例 並 配置網絡請求參數 
步驟6:發送網絡請求(採用最經常使用的異步方式)

 

步驟7: 處理服務器返回的數據

接下來,咱們一步步進行Retrofit的使用。

  • 具體使用

步驟1:添加Retrofit庫的依賴

1. 在 Gradle加入Retrofit庫的依賴

 

build.gradle

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2. 添加 網絡權限 
AndroidManifest.xml

 
  • 1

步驟2:建立 接收服務器返回數據 的類

  • API 的數據格式說明以下:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

數據格式說明

  • 根據 有道API 的數據格式,建立 接收服務器返回數據 的類:

Translation.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

步驟3:建立 用於描述網絡請求 的接口

採用 註解 描述 網絡請求參數。

PostRequest_Interface.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

接下來的步驟均在PostRequest.java內實現(看註釋)

步驟4:建立Retrofit對象 
步驟5:建立 網絡請求接口 的實例 
步驟6:發送網絡請求

 

步驟7:處理返回數據

PostRequest.java

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

因爲此處採用了 Gson 解析,因此須要在 Gradle 加入依賴 
build.gradle

 
  • 1

運行結果

運行結果

Demo地址

Carson_Ho的Github:https://github.com/Carson-Ho/RetrofitDemo

5. Retrofit 的拓展使用

  • Retrofit的使用場景很是豐富,如支持RxJavaPrototocobuff
  • 具體設置也很是簡單 & 方便:
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

具體關於 RxJava的使用這裏就不展開,請期待下篇關於 Rxjava的文章。

6. 總結

相關文章
相關標籤/搜索