【发布时间】:2018-03-04 00:04:03
【问题描述】:
我有 OkHttp 客户端的 Singleton 匕首模块,我正在尝试使用 Interceptor 添加标头
@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache, final LocalData localData) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.HEADERS);
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.readTimeout(60, TimeUnit.SECONDS);
client.addInterceptor(logging);
client.addNetworkInterceptor(new Interceptor() {
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("Hp-Application", "Android");
Request request = requestBuilder.build();
Response originalResponse = chain.proceed(request);
try {
if (originalResponse.code() == 200) {
localData.setLastUpdateTime(System.currentTimeMillis());
}
} catch (Exception e) {
e.printStackTrace();
}
return originalResponse;
}
});
client.connectTimeout(60, TimeUnit.SECONDS);
client.cache(cache);
return client.build();
}
但是查看日志我看不到预期的标题。我也收到错误,因为如果没有必需的标头,特定调用将无法工作。
我还尝试使用不同的类将其添加到 addInterceptor()/addNetworkInterceptor()
public class HeaderInterceptor
implements Interceptor {
@Override
public Response intercept(Chain chain)
throws IOException {
Request request = chain.request();
request = request.newBuilder()
.addHeader("Hp-Application", "Android")
.build();
return chain.proceed(request);
}
}
但是这种方式对我也不起作用。
如何将此标头添加到只有一个实现的应用程序的每个调用中?
【问题讨论】:
标签: android retrofit2 interceptor okhttp3