天天看點

Retrofit2的使用

Android常用的網絡通路HttpClient, HttpUrlConnection,OkHttp(okgo),xUtils, Volley等. Android4.4之後使用OkHttp作為HttpUrlConnection底層實作。這次講一下Retrofit2怎麼使用。

Retrofit2實際上是通過注解的方式對okhttp又一次封裝。

在AndroidStudio項目中,添加Retrofit2的依賴。

compile 'com.squareup.retrofit2:retrofit:2.3.0'

程式建構成功後,檢視項目具體依賴了多少jar包。

retrofit2 強制依賴了okhttp3的相關庫。這也說明了retrofit2底層是okhttp3具體實作的。okhttp3是用來具體通路網絡的,okio是squareup對Java的io/nio的補充,使其更容易通路,存儲和處理資料。okio主要功能封裝到了ByteString和Buffer裡面了。

簡單的網絡通路(以https://suggest.taobao.com/sug?code=utf-8&q=java&callback=cb為例)。

2.1. 首先執行個體化okhttp

2.2. 其次執行個體化retrofit,并将執行個體化好的okhttp3關聯到retrofit2。

2.2.1 ...build()方法:

從這個方法裡面可以看出,在執行個體化Retrofit的時候,baseUrl這個變量是必須要設定的,否則直接抛出IllegalStateException;而其餘的一些資訊如果不進行,程式裡面會給設定一個預設的資訊.預設給設定了OkHttpClient執行個體,OkHttp3連接配接池、解析工廠、CallAdapter等資訊;然後傳回了一個retrofit2執行個體。

2.3. 定義接口檔案ApiService。

定義一個接口資訊。Retrofit2中通路的一個網絡接口,傳回的都是一個Call<ResponseBody> 執行個體,準确的說是Call<T>執行個體,但是這個執行個體中并沒有在執行個體化Retrofit2中設定addConverterFactory方法,如果需要解析成具體的JavaBean,則又需要依賴 'com.squareup.retrofit2:converter-gson:2.0.2', 'com.google.code.gson:gson:2.3.1'。當然再配合rxjava,rxandroid來使用的話,将是Android平台很流行的網絡通路架構,三者的整合封裝本文不講。

Retrofit2中支援多種注解來定義http網絡通路,比如:POST,GET,DELETE,PUT;還支援多種标記注解FormUrlEncoded(使用到的注解都放到了retrofit2.http包下)

已2.3 ApiService接口為例。這個接口中定義了一個getGithubApi方法,該方法使用get方式送出,具體的路徑則寫到@GET("sug?code=utf-8&q=java&callback=cb"),我們知道get方式送出參數是直接将參數拼接到url位址後面。同樣也可以使用POST注解,表示該表單使用POST方式送出參數,要送出的參數則需要傳入到方法裡面了,該方法就應該這麼定義getGithubApi(@Field("code") String code,@Field("q") String q,@Field("callback") String callback)或者getGithubApi(@FieldMap Map<String, String> params)//其中params的key作為參數名,value作為參數的值。

常用的注解表格

标記在方法名之上

序号

名稱

備注

1

GET

表示該方法使用GET方式送出參數。

2

POST

表示該方法使用POST方式送出參數,這個經常和參數标記@Field和@FieldMap組合使用,也配合方法标記@FormUrlEncoded使用。

3

PUT

4

DELETE

5

PATCH

6

HEAD

7

OPTIONS

8

HTTP

更加靈活的标記,這個标記裡面可以指定,送出方式,path值,是否有body。

9

Streaming

傳回流資料,當伺服器傳回的資料過大時使用

比如:使用HTTP注解

這裡面指定了送出方式,path路徑,是否有body體。在這個地方path="zzhhz/{id}",id是不确定的,又要當一個參數傳進去,用{}标記變量,然後使用Path注解标記在方法形參前。

标記在形參之前:

Field/FieldMap

這個參數注解經常配合POST注解使用,因為POST是隐式送出參數。

Part/PartMap

這個經常是表示送出檔案,又和Multipart,POST注解配合使用。

Path

url路徑,如上邊HTTP注解示例

Query/QueryMap/QueryName

查詢參數,通常配合GET注解使用

2.4. 通路資料。

之前說過Retrofit2強制依賴了OkHttp3, 在2.2執行個體化Retrofit2的時候,将已執行個體化的OkHttpClient傳入進Retrofit2裡,供其進行網絡通路。

Retrofit2和OkHttp3執行個體化過程中使用到了建造者模式(不贅述涉及模式)。

完整的網絡通路設定:添加上攔截器(基于Java項目,開發工具IDEA)。

@Test

public void testRetrofit() throws IOException {

}

<a href="mailto:br/"></a>

<a href="mailto:br/">到此Retrofit2講解完畢。語言組織的不好,有什麼問題大家可以留言,互相學習。</a>

本文轉自 墨宇hz 51CTO部落格,原文連結:http://blog.51cto.com/zzhhz/2052570

繼續閱讀