更新Retrofit到Retrofit 2后,OkHttpClient无法使用

10

我在将retrofit升级到retrofit2后出现了这个错误。

FATAL EXCEPTION: OkHttp Dispatcher Process: nz.co.datacom.mars.junction, PID: 21616
java.lang.NoSuchMethodError: No virtual method log(Ljava/lang/String;)V in class Lokhttp3/internal/Platform; or its super classes (declaration of 'okhttp3.internal.Platform' appears in /data/app/nz.co.datacom.mars.junction-1/base.apk)
at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:109) at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:157) at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) at okhttp3.RealCall.access$100(RealCall.java:30)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)

我在应用程序中使用的库版本为:

    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.0'
    compile 'com.squareup:otto:1.3.7'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'

不太确定是因为okhttp版本还是其他原因,但我尝试了2.3.0到3.4.0之间的几个不同版本,都没有成功。

有任何想法吗?提前感谢您。

2个回答

20

我和你遇到了相同的问题。

首先,抛弃:

compile 'com.squareup.okhttp3:okhttp:3.2.0'

Retrofit依赖于okhttp3,因此不需要再单独引入。另外,当你查看Retrofit 2.1.0的依赖关系时,会发现它依赖于okhttp 3.3.0,因此可能会出现冲突。请记住,最终的依赖版本是写在gradle文件中的。如果你没有手动指定,那么Gradle会自动解析并获取正确的版本。

还有一个更新版本的Logging Interceptor和urlconnection:

compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1'

希望这解决了问题。


3

此外,理解修复的最重要一点是确保okhttp3依赖项与这里的合作者声明的版本号完全一致。


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