在没有 OkHttp 的情况下改造通用标头?

Khe*_*raj 6 android retrofit okhttp retrofit2 okhttp3

问题:

今天我在 OkHttp 中遇到了一个异常。

引起:java.lang.IllegalStateException:预期的 Android API 级别为 21+,但为 19

我知道 Okhttp 不再支持 <21 版本的设备。

Okhttp的GitHub的页面和还对github上的问题,从okhttp 3.13版本-

OkHttp 适用于 Android 5.0+(API 级别 21+)和 Java 8+。

这是一个非常重大的变化,因为我所有的项目都在minSdkVersion = 16. 或者至少 19 个。

我尝试了什么?

  • Retrofit 官方页面所述,有一种方法可以在每个请求中单独添加标头,但这需要在每个请求中手动添加标头。
  • 我不想使用旧版本的 Okhttp。因为它可能会导致我在较新的 okhttp 版本中修复意外问题。(还是我应该使用旧的?)

我需要的:

我不想minSdkVersion只为使用 Okhttp删除对 ~10% 设备的支持(如果我增加到21+)。我使用 Okhttp 为 Retrofit 的所有请求添加一个通用标头。

有没有办法在不使用 Okhttp 的情况下添加通用标头?

Hos*_*san 0

您可以使用拦截器添加您想要的所有标头,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

并用这个返回构建器

 return builder.connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(25, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS).build();
Run Code Online (Sandbox Code Playgroud)