今天我在OkHttp遇到了一个例外。
引起:java.lang.IllegalStateException:预期的Android API等级21+但是19
我知道Okhttp不再支持<21版本的设备了。
来自github page of Okhttp以及github issues,来自okhttp 3.13版 -
OkHttp适用于Android 5.0+(API级别21+)和Java 8+。
这是一个非常重大的变化,因为我的所有项目都在minSdkVersion = 16
上运行。或者至少19岁。
我不希望删除对~10%设备的支持(如果我将minSdkVersion
增加到21+)仅用于使用Okhttp。我使用Okhttp为所有Retrofit请求添加一个公共头。
有没有办法在不使用Okhttp的情况下添加公共标题?
您使用Interceptor添加所需的所有标头,如下所示:
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();