带Multidex和Kitkat的Okhttp.Builder中的ExceptionInInitializerError

Jae*_*ger 6 java android retrofit2 okhttp3

我在ExceptionInInitializerError启用Multidex 的情况下运行Kitkat 4.4.2的VM上遇到异常。

java.lang.ExceptionInInitializerError
    at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
    at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015)
    at myapp.utils.Utils.getHttpClientBuilder(Utils.java:131)
    at myapp.fragments.FragmentHome.getHome(FragmentHome.java:326)
    at 
myapp.fragments.FragmentHome.onViewCreated(FragmentHome.java:135)
Run Code Online (Sandbox Code Playgroud)

我有以下库:

implementation 'jp.wasabeef:recyclerview-animators:3.0.0'
implementation 'com.ashokvarma.android:bottom-navigation-bar:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.ogaclejapan.smarttablayout:utils-v4:2.0.0@aar'
implementation 'com.duolingo.open:rtl-viewpager:1.0.3'
implementation 'com.squareup.retrofit2:retrofit-converters:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.karumi:dexter:5.0.0'
implementation 'com.nineoldandroids:library:2.4.0'
implementation 'org.jsoup:jsoup:1.11.3'
implementation 'saschpe.android:customtabs:2.0.0'
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码创建改造连接

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_LINK)
            .addConverterFactory(GsonConverterFactory.create())
            .client(Utils.getHttpClientBuilder())
            .build();
Run Code Online (Sandbox Code Playgroud)

并使用此代码获取构建器的实例

public static OkHttpClient getHttpClientBuilder(){
    return new OkHttpClient.Builder()
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
            .build();
}
Run Code Online (Sandbox Code Playgroud)

getHttpClientBuilder()方法中调用“ build()”时会发生异常。

我还在AndroidManifest.xml中分配了一个默认应用程序,它进行了扩展MultiDexApplication并包含MultiDex.install(this);在中onCreate(Bundle bundle)

该问题仅在奇特卡特发生。有什么想法吗?我尝试降级Okhttp库并将其升级到最新版本,但没有成功。

编辑:

从Retroft构建器中删除客户端不会更改任何内容。错误仍然显示。

ita*_*lah 10

OkHttp 3.13+ 需要 Android 5+

square/okhttp github页面提到最低要求是Android 5+

Github 链接

中链接

正如@Jaeger 所提到的,@fancyjyl 对于低于 Android 5 的版本我们需要使用 OkHttp 3.12.x,但不建议使用它。


fan*_*jyl 8

显示应用程序依赖关系树

+--- com.ogaclejapan.smarttablayout:utils-v4:2.0.0
+--- com.duolingo.open:rtl-viewpager:1.0.3
+--- com.squareup.retrofit2:retrofit-converters:2.5.0
+--- com.squareup.okhttp3:logging-interceptor:3.14.1
|    \--- com.squareup.okhttp3:okhttp:3.14.1 (*)
+--- com.squareup.okhttp3:okhttp:3.12.0 -> 3.14.1 (*)
Run Code Online (Sandbox Code Playgroud)

你应该使用 3.12.0 logging-interceptor

implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'
Run Code Online (Sandbox Code Playgroud)

  • 问题其实是通过降级到最低版本的Retrofit &amp; Okhttp客户端解决的 (2认同)