Retrofit注解

本文介绍了Retrofit库在网络请求中的应用,包括@Query用于GET请求参数,@Path用于动态构建URL,@Url处理完全动态的URL,以及@Headers和@Header用于设置HTTP头信息。这些注解帮助简化Android应用的网络接口调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值