问题:
今天我在 OkHttp 遇到了异常。
Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 19
我了解到 Okhttp 不再支持 <21 版本的设备。
来自 github page of Okhttp以及 github issues , 来自 okhttp 版本 3.13 -
OkHttp works on Android 5.0+ (API level 21+) and on Java 8+.
这是一个非常重大的变化,因为我所有的项目都在 minSdkVersion = 16
上运行。或者至少 19。
我尝试了什么?
- 有一种方法可以在每个请求中单独添加 header ,如 Retrofit official page 中所述。 , 但这需要在每个请求中手动添加 header 。
- 我不想使用旧版本的 Okhttp。因为它可能会导致我在较新的 okhttp 版本中修复的意外问题。 (或者我应该使用旧的?)
我需要什么:
我不想删除对 ~10% 设备的支持(如果我将 minSdkVersion
增加到 21+)只是为了使用 Okhttp。我使用 Okhttp 为 Retrofit 的所有请求添加一个通用 header 。
有没有办法不使用 Okhttp 添加通用 header ?
最佳答案
你使用拦截器来添加你想要的所有标题:
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
Request request;
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
request = chain.request().newBuilder().addHeader("Authorization", "Bearer " + GlobalClass.accessToken)
.addHeader("Accept", "application/json").build();
return chain.proceed(request);
}
}).addNetworkInterceptor(httpLoggingInterceptor);
并用这个返回生成器
return builder.connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(25, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS).build();
关于android - 在没有 OkHttp 的情况下改造公共(public) header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55258307/