Android

Retrofit常用注解

2020-05-31  本文已影响0人  夜沐下的星雨

1.需要掌握的注解字段

Get Post

Url

Query QueryMap Field FieldMap

Path Body Part MulltiPart

Header Headers FormUrlEncode

retrofit的简单实现:

依赖:

implementation 'com.squareup.retrofit2:retrofit:2.5.0'

implementation 'com.squareup.retrofit2:converter-gson:2.1.0'

权限: <uses-permission android:name="android.permission.INTERNET"/>

代码:

Retrofit retrofit = new Retrofit.Builder()

.baseUrl("http://www.xxxx.com") // 添加请求地址

.addConverterFactory(GsonConverterFactory.create())//使用gson库解析

.build();

IFoodService iFoodService = retrofit.create(IFoodService.class);

Call<ResponseBody> call = iFoodService.getFoodList();

call.enqueue(new Callback<ResponseBody>() {

....此处忽略

1.Get

形式:url + 参数形式。 eg: http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1

@GET("/ios/cf/dish_list.php?stage_id=1&limit=20")

Call<ResponseBody> getFoodList(@Query("page") String page);

2.Post

发送post请求,一般通过表单发送字段

FormUrlEncoded标识本次请求是表单形式的传参

@FormUrlEncoded

@POST("v1/login")

Call<ResponseBody> userLogin(@Field("phone") String phone, @Field("password") String password);

3.Url

使用base url和端点url可以应对大多数API,但是应用中总会出现另类的API。在我的示例中,现在要获取天气,当然我只能找到一个免费的api了。

@Headers("apikey:b86c2269fe6588bbe3b41924bb2f2da2")

@GET

Call<WeatherWrapper> weather(@Url String url, @Query("cityname") String cityName);

4.Query QueryMap

主要用于get请求,把参数追加到url路径里。

@GET("/ios/cf/dish_list.php?stage_id=1&limit=20")

Call<ResponseBody> getFoodList(@Query("page") String page);

Call<ResponseBody> getFoodList(@QueryMap Map<String, String> options);

5.Field FieldMap

主要用于post请求表单里的参数。可以对比以下两种方式的不同。

@FormUrlEncoded

@POST("v1/login")

Call<ResponseBody> userLogin(@Field("phone") String phone, @Field("password") String password);

@FormUrlEncoded

@POST("book/reviews")

Call<String> addReviews(@FieldMap Map<String, String> fields);

6.Path

接收一个字符串表示接口 path ,与 baseUrl 组成完整的 Url;

@GET("blog/{id}")Call<ResponseBody>getBlog(@Path("id")intid);

7.Body

使用 @Body 注解,指定一个对象作为 request body 。

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

8.Part MulltiPart

主要处理文件上传

@Multipart@POST("upload")Call<ResponseBody>uploadOneFile(@PartMultipartBody.Part body);

9.Header Headers

使用 @Headers 注解设置固定的请求头,所有请求头不会相互覆盖,即使名字相同。

使用 @Header 注解—动态更新请求头,匹配的参数必须提供给 @Header ,若参数值为 null ,这个头会被省略

// 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的使用

@GET("user")

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

上一篇 下一篇

猜你喜欢

热点阅读