没有OkHttp改造公共头?

问题描述 投票:3回答:1

Problem:

今天我在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岁。

What I tried?

  • 有一种方法可以像Retrofit official page中记录的那样单独在每个请求中添加标头,但是这需要在每个请求中手动添加标头。
  • 我不想使用Okhttp的旧版本。因为它可能导致我在更新的okhttp版本中修复的意外问题。 (或者我应该使用旧的?)

What I need:

我不希望删除对~10%设备的支持(如果我将minSdkVersion增加到21+)仅用于使用Okhttp。我使用Okhttp为所有Retrofit请求添加一个公共头。

有没有办法在不使用Okhttp的情况下添加公共标题?

android retrofit retrofit2 okhttp okhttp3
1个回答
0
投票

您使用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();
© www.soinside.com 2019 - 2024. All rights reserved.