猿问

预期 Android API 级别为 21+,但使用 Retrofit 2、OkHttp3

我使用Retrofit 2 和 OkHttp3处理来自服务器的数据,在使用Min_SDK 17时出现错误,我的设备的 API也是17

我尝试了这个答案:How to fix Expected Android API level 21+ but was 19 in Android

我也尝试了这个答案https://github.com/square/okhttp/issues/4597#issuecomment-461204144

但我得到同样的错误。

我的 API 客户端


    public class APIClient {


private static Retrofit retrofit;

private static OkHttpClient okHttpClient;


public static Retrofit getInstanceRetrofit(){


    if(okHttpClient==null) {

        initOkHttp();

    }

    if(retrofit==null) {

        retrofit = new Retrofit.Builder()

                .baseUrl(Const.URL)

                .client(okHttpClient)

                .addConverterFactory(GsonConverterFactory.create())

                .build();

    }

        return retrofit;


}


  private static void initOkHttp() {

    int REQUEST_TIMEOUT = 60;

    OkHttpClient.Builder httpClient = new OkHttpClient().newBuilder()

            .connectTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS)

            .readTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS)

            .writeTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS);


    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);


    httpClient.addInterceptor(interceptor);


    httpClient.addInterceptor(new Interceptor() {

        @Override

        public Response intercept(@NonNull Chain chain) throws IOException {

            Request original = chain.request();

            Request.Builder requestBuilder = original.newBuilder()

                    .addHeader("Accept", "application/json")

                    .addHeader("Content-Type", "application/json");

            Request request = requestBuilder.build();

            return chain.proceed(request);

        }

    });


    okHttpClient = httpClient.build();

}

  }


扬帆大鱼
浏览 199回答 3
3回答

万千封印

问题是您已经添加了OkHttp两次依赖项。在你的build.gradle你有:dependencies&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;implementation&nbsp;"com.squareup.okhttp3:okhttp:3.11.0" &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;implementation&nbsp;"com.squareup.okhttp3:okhttp:3.13.1"}从版本 3.13.0 开始,他们删除了对 Android < 5 的支持。您只需删除implementation&nbsp;"com.squareup.okhttp3:okhttp:3.13.1"线,它应该工作正常

慕桂英546537

如果你们仍然崩溃Android 4.0 and above,这里有一个快速解决方案:implementation("com.squareup.retrofit2:retrofit:2.7.1")implementation("com.squareup.okhttp3:okhttp:3.12.8") {force = true}implementation "com.squareup.okhttp3:logging-interceptor:3.12.8"以上代码经过测试和验证,Android 4.4

江户川乱折腾

在你的 gradle 文件中你有:implementation "com.squareup.okhttp3:okhttp:3.11.0"文档说:https://square.github.io/okhttp/OkHttp 适用于 Android 5.0+(API 级别 21+)和 Java 8+。OkHttp 3.12.x 分支支持 Android 2.3+(API 级别 9+)和 Java 7+。这些平台缺乏对 TLS 1.2 的支持,不应使用。但由于升级很困难,我们将在 2020 年 12 月 31 日之前将关键修复程序向后移植到 3.12.x 分支。所以你可以尝试:implementation "com.squareup.okhttp3:okhttp:3.12.0"
随时随地看视频慕课网APP

相关分类

Java
我要回答