Android開發Retrofit提升

前言:

一不小心,前一篇關於Retrofit的文章 https://blog.csdn.net/qq_34942689/article/details/70052972 已經是17年初次學習的時候寫的了,過了這麼久再來寫跟Retrofit相關的文章一是爲了鞏固,二是現在的項目也有用到。前面大概寫了Retrofit簡單的使用和GET 註解,現在往深一點介紹一下
一:註解 Retrofit2.0是在okhttp的基礎上進行封裝的,網絡請求是通過okhttp實現的。Retrofit通過註解的方式,進行網絡請求描述,其註解根據功能可分爲三大類
1.方法類:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、HTTP
2.標記類:FormUrlEncoded、Multipart、Streaming
3.參數類:Headers、Header、Body、Field、FieldMap、Part、PartMap、Query、QueryMap、Path、URL

1:方法類: 其中除了HTTP之外的都比較基礎,HTTP可以說是其他幾個的總和:其可用於替代以上 7 個,及其他擴展方法;
有 3 個屬性:method、path、hasBody。基礎使用爲

public interface APIService{
/**
* method  請求方法,不區分大小寫
* path    路徑
* hasBody 是否有請求體
*/
@HTTP(method = "get", path = "new/{id}", hasBody = false)
Call<ResponseBody> getNew(@Path("id") int id);
}

2:標記類: 針對某一個函數進行標記,表示其作用是什麼。表單請求:FormUrlEncoded、Multipart,標記:Streaming
1:FormUrlEncoded:請求體是from表單
2:Multipart:請求體是支持文件上傳的 From 表單
3:Streaming響應體的數據用流的形式返回未使用該註解,默認會把數據全部載入內存,之後通過流獲取數據也是讀取內存中數據,所以返回數據較大時,需要使用該註解
3: 參數類: 針對方法或者參數進行修飾的註解
1:Headers 作用於方法
2:Header、Body、Field、FieldMap、Part、PartMap、Query、QueryMap、Path、URL 作用於方法參數(形參)

@Headers 註解設置固定的請求頭,所有請求頭不會相互覆蓋,即使名字相同

@Header 註解動態更新請求頭,匹配的參數必須提供給 @Header ,若參數值爲 null ,這個頭會被省略,否則,會使用參數值的 toString 方法的返回值

@Body 非表單請求體;指定一個對象作爲 request body 。作用:以 Post方式 傳遞 自定義數據類型 給服務器注意:如果提交的是一個Map,那麼作用相當於 @Field

@Field 表單字段作用:發送 Post請求 時提交請求的表單字段具體使用:與 @FormUrlEncoded 註解配合使用

@FieldMap表單字段,與 Field、FormUrlEncoded 配合;接受 Map<String, String> 類型,非 String 類型會調用 toString() 方法

@Part、@PartMappost請求時,提交請求的表單字段,與 @ Multipart註解 配合。和@Field的區別:功能相同,但攜帶的參數類型更加豐富,包括數據流,所以適用於 有文件上傳 的場景

@Path作用:URL地址的缺省值

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

@Url作用:直接傳入一個請求的 URL變量 用於URL設置Map 用來組合複雜的參數;

Query、QueryMap 與 Field、FieldMap 功能一樣,生成的數據形式一樣;

Query、QueryMap 的數據體現在 Url 上;

Field、FieldMap 的數據是請求體;

{佔位符}和 PATH 儘量只用在URL的 path 部分,url 中的參數使用 Query、QueryMap 代替,保證接口的簡潔;
Query、Field、Part 支持數組和實現了 Iterable 接口的類型, 如 List、Set等,方便向後臺傳遞數組。

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