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