Retrofit 网络请求参数注解@Path @Field @Query 等使用

请求参数呢大致如下,盗个别人的图, 下面就说下这些内容使用

其中 @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));
                    }
                });

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值