Android 改装2 addQueryParam更换

Android 改装2 addQueryParam更换,android,http,post,retrofit,Android,Http,Post,Retrofit,在以前的改型版本中,可以添加拦截器,并使用拦截器添加全局需要的查询参数,例如: .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade requestFacade) { requestFacade.addQueryParam("pla

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

 .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实现--

将客户端添加到您的改装--


对于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();

这非常适合查询参数,非常感谢。如果可能(我在其他地方找不到答案,如果愿意,我可以提出一个新的stackoverflow问题),如何从这个截取中附加一个额外的post函数。例如,如果我想添加一个额外的:.addPostField(“sUserKey”、“osdjnfj235k2k”)是否可以从这里开始?这并不是那么简单。当拦截器获取post参数时,post参数已经转换为
RequestBody
,并且没有方法对其进行操作。您可能需要通过添加新字段来修改
RequestBody
。也许最好再问一个问题,如果没人问,我今晚就试试看。最新版本的改型引发了UnsupportedOperationException异常
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://www.example.com")
    .client(client)         
    .build();
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();