Android中Retrofit的簡(jiǎn)要介紹
Retrofit
A type-safe HTTP client for Android and Java
適用于Java和Android的安全的HTTP客戶端
Retrofit是一個(gè)可用于Android和Java的網(wǎng)絡(luò)庫(kù),使用它可以簡(jiǎn)化我們的網(wǎng)絡(luò)操作,提高效率和正確率。它將請(qǐng)求過(guò)程和底層代碼封裝起來(lái)只暴露我們業(yè)務(wù)中的請(qǐng)求和返回?cái)?shù)據(jù)模型。
public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); }
@這是一個(gè)Retrofit將Rest API(服務(wù)端post或get請(qǐng)求)轉(zhuǎn)換為Java接口的例子
每一個(gè)由接口返回的Call對(duì)象都可以與遠(yuǎn)程web服務(wù)端進(jìn)行同步或者異步的HTTP請(qǐng)求通信。例如:
Call<List<Repo>> repos = service.listRepos("octocat");
為什么選擇Retrofit
AsyncHttp ,Volley和Retrofit的對(duì)比
Retrofit中的注解
Retrofit使用注解來(lái)描述HTTP請(qǐng)求
請(qǐng)求方式
每一個(gè)請(qǐng)求必須指定http請(qǐng)求相對(duì)應(yīng)的url注解和請(qǐng)求方式(內(nèi)置5種請(qǐng)求方式注解:GET、POST、PUT 、DELETE、HEAD)
@GET("users/list")
也可以將參數(shù)跟在后面
@GET("users/list?sort=desc")
URL操作
一個(gè)請(qǐng)求的URL的參數(shù)可以通過(guò){}包裹快來(lái)動(dòng)態(tài)替換,然后在相應(yīng)的@Path參數(shù)中進(jìn)行賦值。
@GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId);
例如這個(gè){id}在groupList請(qǐng)求中的@Path(“id”) int groupId來(lái)對(duì)應(yīng)賦值。
也可以使用@Query給groupList請(qǐng)求方法動(dòng)態(tài)添加其他請(qǐng)求參數(shù)
@GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
如果是比較多的請(qǐng)求參數(shù),我們可以使用Map來(lái)構(gòu)建
@GET("group/{id}/users") Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
請(qǐng)求的Body
能夠通過(guò)@Body注解來(lái)指定一個(gè)方法作為HTTP請(qǐng)求主體
@POST("users/new") Call<User> createUser(@Body User user);
這個(gè)參數(shù)對(duì)象會(huì)被Retrofit實(shí)例中的converter進(jìn)行轉(zhuǎn)化。如果沒(méi)有給Retrofit實(shí)例添加任何converter的話則只有RequestBody可以作為參數(shù)使用。
form encode 和 multipart
方法也可以通過(guò)聲明來(lái)發(fā)送form-encoded和multipart類型的數(shù)據(jù)。
可以通過(guò)@FormUrlEncoded注解方法來(lái)發(fā)送form-encoded的數(shù)據(jù)。每個(gè)鍵值對(duì)需要用@Filed來(lái)注解鍵名,隨后的對(duì)象需要提供值。
@FormUrlEncoded @POST("user/edit") Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
也可以通過(guò)@Multipart注解方法來(lái)發(fā)送Mutipart請(qǐng)求。每個(gè)部分需要使用@Part來(lái)注解。
@Multipart@PUT("user/photo") Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
多個(gè)請(qǐng)求部分需要使用Retrofit的converter或者是自己實(shí)現(xiàn) RequestBody來(lái)處理自己內(nèi)部的數(shù)據(jù)序列化
頭部操作
可以通過(guò)使用@Headers注解來(lái)設(shè)置請(qǐng)求靜態(tài)頭。
@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);
注意的是頭部參數(shù)并不會(huì)相互覆蓋,同一個(gè)名稱的所有頭參數(shù)都會(huì)被包含進(jìn)請(qǐng)求里面。
當(dāng)然你可以通過(guò) @Header 注解來(lái)動(dòng)態(tài)更新請(qǐng)求頭。一個(gè)相應(yīng)的參數(shù)必須提供給 @Header 注解。如果這個(gè)值是空(null)的話,那么這個(gè)頭部參數(shù)就會(huì)被忽略。否則的話, 值的 toString 方法將會(huì)被調(diào)用,并且使用調(diào)用結(jié)果。
@GET("user") Call<User> getUser(@Header("Authorization") String authorization)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Android 中CheckBox多項(xiàng)選擇當(dāng)前的position信息提交的示例代碼
這篇文章主要介紹了Android 中CheckBox多項(xiàng)選擇當(dāng)前的position信息提交的示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-07-07android webview獲取html代碼和根據(jù)id獲取value實(shí)例
這篇文章主要介紹了android webview獲取html代碼和根據(jù)id獲取value實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03android 復(fù)制 粘貼 剪切功能應(yīng)用
網(wǎng)上有很多android 復(fù)制 粘貼 剪切功能的文章,只是放到自己的程序中不知道如何處理,現(xiàn)在尋得一可行方法,需要的朋友可以參考下2012-11-11Android四大組件之Service服務(wù)詳細(xì)講解
Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒(méi)有接口,生命周期也與活動(dòng)Activity非常不同。通過(guò)使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁(yè)等,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考下2022-07-07