Retrofit注解

1. 注解类型

Retrofit注解_第1张图片

Retrofit路径结合的规则

2. 网络请求方法

2.1 Get请求

完整地址:http://mock-api.com/2vKVbXK8.mock/getUserInfo?id=userid

2.1.1 @Query

创建Retrofit实例必须传入baseurl(http://mock-api.com/2vKVbXK8.mock/),在@GET("getUserInfo")注解中的getUserInfo才是需要访问的地址。?后面的是需要传入的参数,使用@Query注解。

?形式拼接一个参数这种格式时,就使用@Query注解,该注解就是在getUserInfo后面添加?,并且以id=传来的参数userId的形式拼接url

private Retrofit retrofit;
retrofit = new Retrofit.Builder()
    .baseUrl("http://mock-api.com/2vKVbXK8.mock/")
    .addConverterFactory(GsonConverterFactory.create()) //返回的Json数据进行解析
    .build();

public interface GetApi {

    /**
     * 获取用户信息
     * @return
     * @Query 注解
     */
    @GET("getUserInfo")
    Call<UserInfo> getUserInfo(@Query("id") String userId);

}

# 2.1.2 @QueryMap

完整地址:http://mock-api.com/2vKVbXK8.mock/api/getArticalInfo?id=405&page=1

   @GET("api/getArticalInfo")
   fun getArticalInfo(@QueryMap params: Map<String, String>): Call<Info>

   val params = HashMap<String, String>()
   params.put("id", "321")
   params.put("page", "2")
   api.getArticalInfo(params).enqueue(object : Callback<Info> {
       override fun onResponse(call: Call<Info>, response: Response<Info>) {
           TODO("Not yet implemented")
       }

       override fun onFailure(call: Call<Info>, t: Throwable) {
           TODO("Not yet implemented")
       }

   })

也可以一个个传递参数

    @GET("api/getArticalInfo")
    fun getArticalInfoSp(@Query("id") id: String, @Query("page") page: String): Call<Info>

2.1.3 @Path

完整地址:

  1. http://mock-api.com/2vKVbXK8.mock/api/getDynamicInfo/1/data
  2. http://mock-api.com/2vKVbXK8.mock/api/getDynamicInfo/2/data

当要访问的地址由某个参数动态拼接而成时,使用@Path注解,实例中param这里具体填入的内容是后面调用该方法时传入的参数

    @GET("api/getDynamicInfo/{param}/data")
    fun getDynamicInfo(@Path("param") param: Int): Call<ResponseBody>

更改baseurl可以使用如下注解:

    @GET("{url}/api/rand.music")
    fun getJsonDataM(
        @Path(value = "url", encoded = true) url: String,
        @Query("sort") sort: String,
        @Query("format") format: String
    ): Call<Data<Info>>

//传入BaseUrl
  val callData = api.getJsonDataM("https://api.uomg.com/", "新歌榜", "json")

2.1.4 @Url

当要访问的地址不只是动态的变几个参数,而是整个地址都要变化,甚至是基类地址也要变化时,这种动态地址就要用到@Url注解。

    @GET
    fun getDynamicInfoUrl(@Url url: String): Call<ResponseBody>

2.1.5 @Headers(“”)

静态添加头部信息:包含添加单个头部、添加多个头部。通过@Headers(“”)注解,内部以key:value的方式填写内容

访问地址: http://mock-api.com/2vKVbXK8.mock/api/staticHeaderInfo

静态添加单个或多个头部

    @Headers("version:1.1")
    @GET("api/staticHeaderInfo")
    fun getStaticHeadersInfo()

    @Headers("version:1.1", "type:android")
    @GET("api/staticHeaderInfo")
    fun getStaticMoreHeadersInfo()

2.1.6 @Header

动态添加单个头部信息

    @GET("api/dynamicHeadersInfo")
    fun getDynamicHeaderInfo(@Header("version") version: String?): Call<ResponseBody?>?

2.1.7 @HeaderMap

动态添加多个头部信息, 使用方法和QueryMap一样。

你可能感兴趣的:(retrofit)