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
完整地址:
- http://mock-api.com/2vKVbXK8.mock/api/getDynamicInfo/1/data
- 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>>//传入BaseUrlval callData = api.getJsonDataM("https://api.uomg.com/", "新歌榜", "json")
2.1.4 @Url
当要访问的地址不只是动态的变几个参数,而是整个地址都要变化,甚至是基类地址也要变化时,这种动态地址就要用到@Url
注解。
@GETfun 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
一样。