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>>
//传入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
一样。