美文网首页
Retrofit 初体验--常用的注解字段

Retrofit 初体验--常用的注解字段

作者: NullPoint3Exce | 来源:发表于2019-01-03 17:32 被阅读0次

需要掌握的注解字段
Get Post Url Query QueryMap Field FieldMap Path Body Part MiulPart 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>() {
....此处忽略
@GET("/ios/cf/dish_list.php?stage_id=1&limit=20")
Call<ResponseBody> getFoodList(@Query("page") String page);
 

请求接口的声明:

   @GET("/banner/json/")
    Call<ResponseBody> getFoodList();

到这里一个简单的get请求的逻辑,就实现了!

  • Post
    发送post请求,一般通过表单发送字段。** 注意:post路径如果没有二级路径写“./” **
@FormUrlEncoded
@POST("v1/login")
Call<ResponseBody> userLogin(@Field("phone") String phone, @Field("password") String password);
 
  • Url
    使用base url和端点url可以应对大多数API,但是应用中总会出现另类的API。在我的示例中,现在要获取天气,当然我只能找到一个免费的api了。
@Headers("apikey:b86c2269fe6588bbe3b41924bb2f2da2")
@GET
Call<WeatherWrapper> weather(@Url String url, @Query("cityname") String cityName);

  • 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);
  • 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);
  • Path
    接收一个字符串表示接口 path ,与 baseUrl 组成完整的 Url;
@GET("blog/{id}")
Call<ResponseBody> getBlog(@Path("id") int id);   
  • Body
    使用 @Body 注解,指定一个对象作为 request body 。
@POST("users/new")
Call<User> createUser(@Body User user);
  • Part MiulPart
    主要处理文件上传
@Multipart
@POST("upload")
Call<ResponseBody> uploadOneFile(@Part MultipartBody.Part body);
  • 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)
  • FormUrlEncode 请求体是 From 表单

相关文章

网友评论

      本文标题:Retrofit 初体验--常用的注解字段

      本文链接:https://www.haomeiwen.com/subject/eokqrqtx.html