我正在尝试使用此tutorial
为每个请求添加查询参数(访问令牌)问题是拦截器,在ServiceGenerator创建的每个请求中都会产生计数:
httpClient.addInterceptor(new Interceptor() {
同样导致httpClient是静态的,所有拦截器都将在不需要的请求中执行。
我应该为正常请求创建自己的OkHttpClients并拥有令牌请求吗?我应该只初始化拦截器和身份验证器一次,然后使用ServiceGenerator?或者有更好的方法吗?
答案 0 :(得分:2)
我认为将访问令牌添加为查询参数不是一个好主意。
更好的方法是将它添加到这样的自定义标题中:
okHttpClient = new OkHttpClient.Builder()
.cache(setCache(context))
.certificatePinner(certificatePinnerBuilder.build())
.retryOnConnectionFailure(false)
.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS)
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("Content-type", "application/json")
.header("AUTH_TOKEN", token)
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
})
.addInterceptor(logger)
.build();
但是,您可以点击此链接:
https://futurestud.io/tutorials/retrofit-2-how-to-add-query-parameters-to-every-request