国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Retrofit 入門篇

2019-11-09 17:30:49
字體:
來源:轉載
供稿:網友

介紹使用注解描述HTTP請求API聲明Url 操作請求body編碼和MultipartRetrofit 配置自定義轉換器

介紹

Retrofit是一種封裝好的網絡請求客戶端(android ,java)

Retrofit將HTTP API轉換為Java接口。

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

Retrofit類生成GitHubService接口的實現。

Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build();GitHubService service = retrofit.create(GitHubService.class);

每個call都可以向遠程Web服務器發出同步或異步HTTP請求。

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

使用注解描述HTTP請求:

? URL參數替換和查詢參數支持 ?對象轉換為請求正文(例如,JSON,協議緩沖區) ? Multipart請求body和文件上傳

API聲明

接口方法及其參數的注解指示如何處理請求 請求方法 每個方法必須具有請求方法和相對URL的HTTP注解。有五個內置注解:GET,POST,PUT,DELETE和HEAD。在注解中指定資源的相對URL。

@GET(“users / list”) 您還可以在URL中指定查詢參數。 @GET(“users / list?sort = desc”)

Url 操作

動態更新請求URL可以使用替換塊和方法上的參數。替換塊是由{ }圍繞的字母數字字符串。相應的參數必須使用相同的字符串用@Path注解

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

也可以添加查詢參數。

@GET(“group / {id} / users”) 調用<List <User >> groupList(@Path(“id”)int groupId,@Query(“sort”)String sort);

對于復雜的查詢參數組合,可以使用Map。

@GET(“group / {id} / users”) 調用<List <User >> groupList(@Path(“id”)int groupId,@QueryMap Map <String,String> options)

請求body

@Body注解可以指定一個 使用@Body注解,一個對象可以被指定為一個HTTP請求body

@POST(“users / new”) 調用<User> createUser(@Body User user);

該對象也將使用Retrofit實例上指定的轉換器進行轉換。 如果沒有添加轉換器,則只能使用RequestBody。

編碼和Multipart

方法上也可以聲明為發送表單編碼和Multipart數據的注解。 當方法上存在@FormUrlEncoded時,將發送表單編碼的數據。每個鍵值對都使用包含名稱的@Field和提供值的對象進行注解。

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

當方法上存在@Multipart時,將使用Multipart請求。零件使用@Part注解聲明。

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

Multipart使用Retrofit的轉換器,或者它們可以實現RequestBody來處理自己的序列化。 HEADER 操作 您可以使用@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)

如果每個request都需要添加公共@Header()則使用okHttp中的OkHttp interceptor.進行設置

同步,異步 調用實例可以同步或異步執行。每個實例只能使用一次,但調用clone()將創建一個可以使用的新實例。 在Android上,回調將在主線程上執行。在JVM上,回調將發生在執行HTTP請求的同一線程上

Retrofit 配置

Retrofit是將API接口轉換為可調用對象的類。默認情況下,Retrofit將為您的平臺提供正常默認值,但允許自定義。

轉換器 默認情況下,Retrofit只能將HTTP主體反序列化成OkHttp的ResponseBody類型,并且它只能接受@Body的RequestBody類型。 可以添加轉換器以支持其他類型。六個同級模塊適應流行的序列化庫,為您提供方便。

Gson: com.squareup.retrofit2:converter-gsonJackson: com.squareup.retrofit2:converter-jacksonMoshi: com.squareup.retrofit2:converter-moshiPRotobuf: com.squareup.retrofit2:converter-protobufWire: com.squareup.retrofit2:converter-wireSimple xml: com.squareup.retrofit2:converter-simplexmlScalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

下面是一個使用GsonConverterFactory類來生成GitHubService接口的實現的示例,該接口使用Gson進行反序列化。


Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .build();GitHubService service = retrofit.create(GitHubService.class);

自定義轉換器

如果您需要與使用Retrofit不支持的內容格式的API進行通信 或者您希望使用不同的庫來實現現有的格式 你可以輕松地創建自己的轉換器。創建一個擴展Converter.Factory類的類,并在構建適配器時傳遞實例。

引用: Retrofit 官網 http://square.github.io/retrofit/#introduction 翻譯 http://blog.csdn.net/hf_zhang/article/details/52473872


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 津南区| 繁峙县| 金乡县| 罗江县| 墨江| 株洲县| 余姚市| 凤翔县| 印江| 潍坊市| 蓝山县| 波密县| 靖远县| 芷江| 长寿区| 蓬莱市| 涞源县| 会宁县| 启东市| 三河市| 洪洞县| 宁陵县| 青铜峡市| 仙桃市| 泾阳县| 镇巴县| 西昌市| 双桥区| 安庆市| 苍溪县| 九龙县| 台南市| 阿克苏市| 武威市| 土默特左旗| 芦溪县| 富平县| 华坪县| 盐源县| 南漳县| 巴南区|