Retrofit 2调用失败 - 抽象方法“void okhttp3.Callback.onResponse”

时间:2016-02-04 15:27:23

标签: android retrofit retrofit2 logan-square

我在我的项目中导入了Retrofit,将以下内容添加到app.gradle:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'

然而现在当执行调用应用程序崩溃时出现以下错误:

FATAL EXCEPTION: OkHttp Dispatcher
    Process: com.my.app, PID: 31176
    java.lang.AbstractMethodError: abstract method "void okhttp3.Callback.onResponse(okhttp3.Call, okhttp3.Response)"
      at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
      at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:33)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:818)

由于LoganSquare JSON parser,我需要导入特定版本的Retrofit(2.0.0-beta3),否则我会考虑使用以前版本的Retrofit。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是Retrofit需要某些版本的OkHttp库。不仅如此,如果您导入日志拦截器,您还需要确保正确的版本。所以,在我看来这有帮助:

compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'

GitHub issue page that's closed上有详细记载,因此不容易找到。

抱怨java.lang.AbstractMethodError: abstract method "void okhttp3.Callback.onFailure(okhttp3.Call, java.io.IOException)"的人说如果你不使用logging-interceptor,你可以完全删除okhttp3的导入。

对于使用LoganSquare的用户,您还需要:

apt 'com.bluelinelabs:logansquare-compiler:1.3.4'
compile 'com.bluelinelabs:logansquare:1.3.4'
compile 'com.github.aurae.retrofit2:converter-logansquare:1.2.