91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中Retrofit的簡要介紹

發布時間:2020-08-20 09:09:18 來源:腳本之家 閱讀:200 作者:吉格斯實驗室 欄目:移動開發

Retrofit

A type-safe HTTP client for Android and Java
適用于Java和Android的安全的HTTP客戶端

Retrofit是一個可用于Android和Java的網絡庫,使用它可以簡化我們的網絡操作,提高效率和正確率。它將請求過程和底層代碼封裝起來只暴露我們業務中的請求和返回數據模型。

public interface GitHubService {
 @GET("users/{user}/repos")
 Call<List<Repo>> listRepos(@Path("user") String user);
}

@這是一個Retrofit將Rest API(服務端post或get請求)轉換為Java接口的例子

每一個由接口返回的Call對象都可以與遠程web服務端進行同步或者異步的HTTP請求通信。例如:

Call<List<Repo>> repos = service.listRepos("octocat");

為什么選擇Retrofit

AsyncHttp ,Volley和Retrofit的對比

Android中Retrofit的簡要介紹

Retrofit中的注解

Retrofit使用注解來描述HTTP請求

請求方式

每一個請求必須指定http請求相對應的url注解和請求方式(內置5種請求方式注解:GET、POST、PUT 、DELETE、HEAD)

@GET("users/list")

也可以將參數跟在后面

@GET("users/list?sort=desc")

URL操作

一個請求的URL的參數可以通過{}包裹快來動態替換,然后在相應的@Path參數中進行賦值。

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);

例如這個{id}在groupList請求中的@Path(“id”) int groupId來對應賦值。

也可以使用@Query給groupList請求方法動態添加其他請求參數

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

如果是比較多的請求參數,我們可以使用Map來構建

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

請求的Body

能夠通過@Body注解來指定一個方法作為HTTP請求主體

@POST("users/new")
Call<User> createUser(@Body User user);

這個參數對象會被Retrofit實例中的converter進行轉化。如果沒有給Retrofit實例添加任何converter的話則只有RequestBody可以作為參數使用。

form encode 和 multipart

方法也可以通過聲明來發送form-encoded和multipart類型的數據。

可以通過@FormUrlEncoded注解方法來發送form-encoded的數據。每個鍵值對需要用@Filed來注解鍵名,隨后的對象需要提供值。

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

也可以通過@Multipart注解方法來發送Mutipart請求。每個部分需要使用@Part來注解。

@Multipart@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

多個請求部分需要使用Retrofit的converter或者是自己實現 RequestBody來處理自己內部的數據序列化

頭部操作

可以通過使用@Headers注解來設置請求靜態頭。

@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
@Headers({
  "Accept: application/vnd.github.v3.full+json",
  "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

注意的是頭部參數并不會相互覆蓋,同一個名稱的所有頭參數都會被包含進請求里面。

當然你可以通過 @Header 注解來動態更新請求頭。一個相應的參數必須提供給 @Header 注解。如果這個值是空(null)的話,那么這個頭部參數就會被忽略。否則的話, 值的 toString 方法將會被調用,并且使用調用結果。

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉树县| 霸州市| 德庆县| 连云港市| 郸城县| 偃师市| 乐亭县| 徐水县| 彰化县| 定远县| 安平县| 灵山县| 宝山区| 重庆市| 偏关县| 云浮市| 顺义区| 鄂尔多斯市| 于都县| 昆明市| 澜沧| 德惠市| 吉安市| 光泽县| 高安市| 收藏| 邛崃市| 天柱县| 宜昌市| 南丰县| 台东县| 临武县| 社旗县| 乌拉特后旗| 克拉玛依市| 通辽市| 平乐县| 娱乐| 宣恩县| 交口县| 中牟县|