首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >预期Android级别为21+,但使用Retrofit 2,OkHttp3时为19

预期Android级别为21+,但使用Retrofit 2,OkHttp3时为19
EN

Stack Overflow用户
提问于 2019-11-03 11:37:35
回答 3查看 6.8K关注 0票数 2

我使用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

但我也犯了同样的错误。

我的Gradle.Build类

代码语言:javascript
运行
复制
    apply plugin: 'com.android.application'

     android {
compileSdkVersion 28
defaultConfig {
    applicationId "some"
    minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}
compileOptions {
    targetCompatibility = "8"
    sourceCompatibility = "8"
}
lintOptions {
    checkReleaseBuilds false
    // Or, if you prefer, you can continue to check for errors in release builds,
    // but continue the build even when errors are found:
}
 }

 dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v13:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0"
implementation "com.squareup.okhttp3:okhttp:3.11.0"
implementation "com.squareup.okhttp3:okhttp-urlconnection:3.11.0"
implementation "com.squareup.okhttp3:logging-interceptor:3.11.0"
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'net.alhazmy13.hijridatepicker:library:2.0.2'
implementation group: 'com.github.msarhan', name: 'ummalqura-calendar', version: '1.1.9'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-places:16.1.0'
implementation 'com.github.jaiselrahman:FilePicker:1.0.2'
implementation 'com.github.bumptech.glide:glide:4.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.13.1'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.loopj.android:android-async-http:1.4.9'
implementation 'com.google.android.gms:play-services-auth-api-phone:16.0.0'

        annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }

我的API客户机

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

我的日志

代码语言:javascript
运行
复制
    1-03 06:09:07.850 2827-2827/some
   E/AndroidRuntime: FATAL EXCEPTION: main
Process: some, PID: 2827
java.lang.ExceptionInInitializerError
    at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:296)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:262)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:235)
    at some.Network.APIClient.initOkHttp(APIClient.java:40)
    at some.Network.APIClient.getInstanceRetrofit(APIClient.java:25)
    at some.MvpImplementation.DropdownImpInteractor.getDropdowns(DropdownImpInteractor.java:18)
    at some.MvpImplementation.DropdownImpPresenter.requestDropdowns(DropdownImpPresenter.java:21)
    at some.Views.LoginActivity.onCreate(LoginActivity.java:87)
    at android.app.Activity.performCreate(Activity.java:5231)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
    at android.app.ActivityThread.access$800(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 19
    at okhttp3.internal.platform.AndroidPlatform.buildIfSupported(AndroidPlatform.java:238)
    at okhttp3.internal.platform.Platform.findPlatform(Platform.java:202)
    at okhttp3.internal.platform.Platform.<clinit>(Platform.java:79)
    at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:296) 
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:262) 
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:235) 
    at some.Network.APIClient.initOkHttp(APIClient.java:40) 
    at some.Network.APIClient.getInstanceRetrofit(APIClient.java:25) 
    at some.MvpImplementation.DropdownImpInteractor.getDropdowns(DropdownImpInteractor.java:18) 
    at some.MvpImplementation.DropdownImpPresenter.requestDropdowns(DropdownImpPresenter.java:21) 
    at some.Views.LoginActivity.onCreate(LoginActivity.java:87) 
    at android.app.Activity.performCreate(Activity.java:5231) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5001) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
    at dalvik.system.NativeStart.main(Native Method)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-03 11:54:55

问题是,您已经两次添加了OkHttp依赖项。

在您的build.gradle中有:

代码语言:javascript
运行
复制
dependencies {
    ...
    implementation "com.squareup.okhttp3:okhttp:3.11.0"
    ...
    implementation "com.squareup.okhttp3:okhttp:3.13.1"
}

从3.13.0版本开始,他们删除了对Android < 5的支持。

代码语言:javascript
运行
复制
implementation "com.squareup.okhttp3:okhttp:3.13.1"

线和它应该工作的很好

票数 4
EN

Stack Overflow用户

发布于 2020-02-25 08:50:46

如果你们还在Android 4.0 and above上崩溃,下面是快速解决方案:

代码语言:javascript
运行
复制
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上进行了测试和验证

谢谢

票数 4
EN

Stack Overflow用户

发布于 2019-11-03 11:53:44

在您的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+)和7+。这些平台缺乏对TLS 1.2的支持,不应使用。但是由于升级很困难,我们将支持3.12.x分支的关键修正,直到2020年12月31日。

所以你可以试着:

implementation "com.squareup.okhttp3:okhttp:3.12.0"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58679774

复制
相关文章

相似问题

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