Retrofit 2 addQueryParam 替换

Retrofit 2 addQueryParam replacement

在以前的改造版本中,可以添加一个拦截器并使用它来添加全局需要的查询参数,例如:

 .setRequestInterceptor(new RequestInterceptor() {
                    @Override
                    public void intercept(RequestFacade requestFacade) {
                        requestFacade.addQueryParam("platform", "android");
                        requestFacade.addQueryParam("app_version", com.package.BuildConfig.VERSION_NAME);


                }
            })

对于新的实施,您需要使用 OkHttpClient.interceptors。使用这种新方法,如何在不删除原始参数的情况下附加参数?

这是一个 okhttp 实现 --

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor() {
    @Override
    public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        HttpUrl url = request.httpUrl().newBuilder()
                     .addQueryParameter("platform", "android")
                     .addQueryParameter("app_version", com.package.BuildConfig.VERSION_NAME)
                     .build();
        Request newRequest = chain.request().newBuilder().url(url).build();
        return chain.proceed(newRequest);
    }
});

将客户端添加到您的改造中 --

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://www.example.com")
    .client(client)         
    .build();

对于 Retrofix 2.3.0,可以使用以下代码:

final OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
    @Override
    public Response intercept(final Chain chain) throws IOException 
    {
        final Request request = chain.request();
        final HttpUrl url = chain.request().url().newBuilder()
             .addQueryParameter("platform", "android")
             .addQueryParameter("app_version", com.package.BuildConfig.VERSION_NAME)
             .build();
        final Request newRequest = chain.request().newBuilder().url(url).build();
        return chain.proceed(newRequest);
    }
}

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://www.example.com")
    .client(client)         
    .build();