Retrofit初探——请求参数

0x00 请求参数

常见的Http请求,除了指定的请求地址,很多时候我们还需要加上一些请求参数,这些参数可能是固定的,也可能是动态添加的。在Retrofit中,我们该如何处理呢?这里以GET方式中添加请求参数为例。
0x01 固定请求参数

这里说的固定请求参数是指每次请求我们都在Url中添加相同的请求的参数。这种场景多出现在需要认证的情况,比如添加 Token 字段等。

在之前的文章中,我们有提到在构建OkHttpClient对象的时候使用过 Interceptor ,在 Interceptor 的逻辑中,我们会重新创建一个 Request 对象,在这个对象中我们可以传入一个 HttpUrl ,在这个对象中,我们可以传入一些需要的请求参数。通过之前对 Interceptor 了解,我们应该知道,这里做的操作是对所有的请求都有效的。这样就可以完成我们为每个请求添加固定请求参数的目的。代码如下:

OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();

                        HttpUrl originalHttpUrl = original.url();

                        HttpUrl url = originalHttpUrl
                                .newBuilder()
                                .addQueryParameter("token", "I_am_user_token")
                                .addQueryParameter("user_key", "I_am_user_user_key")
                                .build();

                        Request request = original
                                .newBuilder()
                                .url(url)
                                .build();

                        okhttp3.Response response = chain.proceed(request);
                        return response;
                    }
                })
                .build();

0x02 动态请求参数

这个指我们在不同的请求中添加不同过的请求参数。比如,在请求用户信息的接口中我们可能需要传入用户ID,在请求记录的接口中我们需要传入起止时间等。由于这样的参数是针对接口的,因此我们就需要在每一个接口做中处理。

    @Query 添加一个请求参数

    // http://119.29.29.29/d?dn=ttdevs.vicp.com
    @GET("/d")
    public Call<ResponseBody> singleParams(@Query("dn") String domain);
通过上面的方式,我们发出的请求就是:

http://119.29.29.29/d?dn={domain}
    @QueryMap 添加一组请求参数

    @GET("/record")
    public Call<ResponseBody> multiParams(@QueryMap(encoded = true) Map<String, String> options);
上面我们发出的请求是:

http://ttdevs.vicp.net/record?p1=v1&p2=v2

这个这个例子中还可以看到,我们使用了一个参数:encoded = true,这个参数的意思是,对我们的参数进行URL
Encode。

0x03 总结

通过上面的介绍,我们可以了解,如果添加我们的请求参数。当需要给每一个请求都添加相同参数时该如何封装,把Retrofit打造成更适合我们使用的工具。

—— EOF ——

转载:http://www.voidcn.com/article/p-wrqszxhf-ct.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值