请求参数呢大致如下,到个别人的图, 下面就说下这些内容使用
其中 @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>() {@Overridepublic void onResponse(Call<CallBean> call, Response<CallBean> response) {Log.e("----------result", response.body().toString());}@Overridepublic void onFailure(Call<CallBean> call, Throwable t) {Log.e("-------onFailure", String.valueOf(t));}});