请求参数呢大致如下,盗个别人的图, 下面就说下这些内容使用
其中 @Path、@Query、@QueryMap 使用 Get 请求 , 假如使用了Post 请求注解使用@Path 一般都会使项目崩溃的,
所以这里我总结了一下自己使用的经验
1 @Path 会是url 中带有参数一般配合{} 一起
@GET("toutiao/index/{type}/{key}")
Observable<BaseBean<LoginBean>> getLogin(@Path("type")String type,@Path("key") String key);
请求地址类似这样的
这样的请求一般 是把要传递的参数直接拼接到url 后面
2 @Query 是把key-value 拼接到url 后面 不要使用{}
@GET("toutiao/index/ ")
Observable<BaseBean<LoginBean>> getLogin(@Query("type") String type,@Query("key") String key);
请求地址类似这样的
3 @QueryMap 这个和@Query 差不多,就是当参数很多的时候直接传递一个map 写法如下
@GET("toutiao/index/ ")
Observable<BaseBean<LoginBean>> getLogin(@QueryMap Map<String, String> map);
请求接口地址
上面三个请求参数使用的GET请求
常使用的@Field 和@FieldMap
实用与POST 请求
4 @Field 一般 配合 @FormUrlEncoded 使用
*************************************************************
标记类 :
@FormUrlEncoded主要是做表单提交,与@POST结合使用
@Multipart主要是与@POST结合使用做文件的上传
@Streaming主要做大文件下载
***************************************************************
一般使用如下
@FormUrlEncoded
@POST("toutiao/index")
Observable<BaseBean<LoginBean>>getPostLogin(@Field("type") String type,@Field("key") String key);
5 @FieldMap
一般使用如下
@FormUrlEncoded
@POST("toutiao/index")
Observable<BaseBean<LoginBean>>getPostLogin(@FieldMap Map<String, String> map);
6 @Body
会将请求参数放到请求体中,适用于POST请求 个人感觉和Map 类似,使用方法如下
public interface NetApi {
@POST("toutiao/index")
Call<CallBean>getNews(@Body LoginParams loginParams);
class LoginParams{
public String type;
public String key;
}
调用
Retrofit retrofit = new Retrofit.Builder() //创建Retrofit 对象
.baseUrl("http://v.juhe.cn/") //指定url
.addConverterFactory(GsonConverterFactory.create()) //把json 转成bean
.build();
NetApi netApi = retrofit.create(NetApi.class); //创建一个请求接口的api
//请求传递参数
// Call<CallBean> data = netApi.getNews("top","b3aecf831dae022145e308abe1af773a");
NetApi.LoginParams params = new NetApi.LoginParams();
params.type ="top";
params.key ="11111111";
Call<CallBean> data = netApi.getNews(params);
//执行异步请求
data.enqueue(new Callback<CallBean>() {
@Override
public void onResponse(Call<CallBean> call, Response<CallBean> response) {
Log.e("----------result", response.body().toString());
}
@Override
public void onFailure(Call<CallBean> call, Throwable t) {
Log.e("-------onFailure", String.valueOf(t));
}
});