没有使用OkHttp如何给Retrofit添加通用头请求?

6

问题:

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

Caused by: 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中已经纠正了这些问题。(或者我应该使用旧版?)

我需要什么:

我不想为使用Okhttp而删除对约10%的设备的支持(如果我将minSdkVersion增加到21+),我使用Okhttp将一个公共标头添加到Retrofit的所有请求中。

是否有一种方法可以不使用Okhttp添加公共标头?


@Blackbelt,您是在指Okhttp拦截器吗? - Khemraj Sharma
1
@Blackbelt 先生,Okhttp在最新版本中删除了对<21版本设备的支持。我不想为了添加一个头部而停止10%的设备支持。因此,我正在寻找替代方案。 - Khemraj Sharma
2
使用 OkHttp 3.12.2 - Basi
看看Volley;https://github.com/google/volley 它得到了Google的支持。唯一的缺点是它的文档不是很好,你需要做更多的工作来设置它,以使其能够像Retrofit一样正常运行。更多信息请参见:https://developer.android.com/training/volley 否则,您将不得不按照自己的方式添加标头到Retrofit请求中。 - MD Naseem Ashraf
@Blackbelt 是的,那是最终解决方案。让我们看看是否还有其他选择。除了Okhttp之外,没有其他拦截器类可用吗? - Khemraj Sharma
显示剩余10条评论
1个回答

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);

并返回带有此内容的构建器

 return builder.connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(25, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS).build();

请注意,我将使用此API 19+。 - Hossam Hassan
你正在使用哪个版本的Okhttp? - Khemraj Sharma
com.squareup.okhttp:okhttp:2.7.5 - Hossam Hassan
com.squareup.okhttp3:logging-interceptor:3.11.0 - Hossam Hassan
com.squareup.retrofit2:retrofit:2.4.0 - Hossam Hassan
我也遇到了同样的问题...但是找不到解决方案...我的客户使用API-19... - Wasi Sadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接