Okhttp3是非常火爆的一个网络请求框架,虽然你90%配合了Retrofit,但大概率你在指定Retrofit的网络请求客户端的时候,也会使用Okhttp3
此篇用于记录在使用Okhttp3中遇到的异常,会不断更新...
java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/internal/http/HttpEngine;
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:219)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.internal.http.HttpEngine" on path: DexPathList[[zip file "/data/app/com.bawie.weidu-2/base.apk", zip file "/data/app/com.bawie.weidu-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.bawie.weidu-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:42)
Suppressed: java.lang.ClassNotFoundException: okhttp3.internal.http.HttpEngine
at java.lang.Class.classForName(Native Method)
java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 23 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
为了大家阅读方便,我删除了中间很多无用的日志,只留下了这么几行日志
刚看到这个异常的时候我以为是分包造成的异常,一水儿的NoClassDefFoundError
,但其实我心里是有疑惑的。果不其然,如果我按照分包异常的思路去解决,无法解决问题。
上网搜索了一下,很多人都说是因为logging-interceptor
与OkHttp3
的版本不一致造成的,但是我仔细查看自己的依赖之后发现我的依赖是这样写的:
implementation 'com.squareup.okhttp3:okhttp:3.1.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.1.2'
也就是说我们的依赖版本是一致的,但为什么还报错呢?
不过网上的帖子却给了我灵感,很有可能是我依赖的版本有问题,不如改个版本号试一下
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
完美解决了我的问题
网友评论