首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有OkHttp的情况下对通用标头进行改造?

在没有OkHttp的情况下对通用标头进行改造?
EN

Stack Overflow用户
提问于 2019-03-20 10:15:06
回答 1查看 2K关注 0票数 6

问题:

今天,我在OkHttp中遇到了一个例外。

原因: java.lang.IllegalStateException:预期Android级别为21+,但为19

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

来自Okhttp的github页面 &也来自github问题,来自okhttp版本3.13 -

OkHttp工作在Android 5.0+ (API级21+)和8+上。

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

我试过什么?

  • 有一种方法可以像改装官方网页中所记录的那样分别在每个请求中添加标头,但这需要在每个请求中手动添加标头。
  • 我不想使用旧版本的Okhttp。因为它可能会导致在较新的okhttp版本中修复的意外问题。(或者我应该用旧的?)

我需要的是:

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

有没有一种不使用Okhttp来添加公共标题的方法?

EN

回答 1

Stack Overflow用户

发布于 2019-03-20 10:53:48

您可以使用Interceptor添加所有您想要的标题,如下所示:

代码语言:javascript
复制
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);

然后用这个返回建造者

代码语言:javascript
复制
 return builder.connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(25, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS).build();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55258307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档