无法使用GSON库解析java.lang.NoSuchMethodError

时间:2016-03-24 23:09:08

标签: java jar gson retrofit retrofit2

我正在尝试构建一个取自;

的示例Retrofit Java程序

https://github.com/square/retrofit/blob/master/samples/src/main/java/com/example/retrofit/SimpleService.java

我包含了必需的依赖罐(retrofit-2.0.0.jar,converter-gson-2.0.0.jar,okhttp-3.0.0-RC1.jar,okio-1.6.0.jar和gson-2.0.jar )到构建路径。

尝试运行应用程序时遇到以下异常。

Exception in thread "main" java.lang.NoSuchMethodError: com.google.gson.Gson.getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
at retrofit2.converter.gson.GsonConverterFactory.responseBodyConverter(GsonConverterFactory.java:63)
at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:325)
at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:308)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:651)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:166)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at com.sun.proxy.$Proxy0.contributors(Unknown Source)
at SimpleService.main(SimpleService.java:40)

我错过了任何依赖的罐子吗?

我正在尝试在独立的Java应用程序中使用Retrofit,并且正在测试样本以便习惯它。如果有人能指出一个简单的示例程序来演示Retrofit的工作,那将会很棒,即使是早期版本的样本也会很好。

5 个答案:

答案 0 :(得分:7)

尝试在gradle中添加:

compile 'com.google.code.gson:gson:2.6.2'

它适合我:)

答案 1 :(得分:2)

以下是一些可能对您有所帮助的依赖项。

GSON和Retrofit

compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:retrofit:2.1.0'

HTTP

compile 'org.apache.commons:commons-lang3:3.4'
compile 'org.apache.httpcomponents:httpcore:4.4.5'

尝试清理项目并与gradle同步。 或尝试在项目中使用相同版本的jar文件。

或者您是否使用正确的值替换了这一行。

@GET("/repos/{owner}/{repo}/contributors")

调用API后的响应是什么。 plz检查浏览器中的URL。

让我知道问题是否仍然存在。

答案 2 :(得分:0)

试试这个:

final RETROFIT_VERSION = '2.0.0'
final OKHTTP_VERSION = '3.2.0'

compile "com.squareup.retrofit2:retrofit:$RETROFIT_VERSION"
compile "com.squareup.retrofit2:converter-gson:$RETROFIT_VERSION"
compile "com.squareup.okhttp3:okhttp:$OKHTTP_VERSION"
compile "com.squareup.okhttp3:okhttp-urlconnection:$OKHTTP_VERSION"

compile 'com.google.code.gson:gson:2.4'

答案 3 :(得分:0)

当我在JEE应用程序中使用Alfresco Rest API时遇到了同样的问题 我通过添加这些Maven依赖项来解决问题

<properties>
    <retrofit.version>2.1.0</retrofit.version>
    <okhttp.version>3.4.1</okhttp.version>
</properties>
<dependencies>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>retrofit</artifactId>
        <version>${retrofit.version}</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>converter-gson</artifactId>
        <version>${retrofit.version}</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.retrofit2</groupId>
        <artifactId>adapter-rxjava</artifactId>
        <version>${retrofit.version}</version>
    </dependency>
    <dependency>
         <groupId>com.squareup.okhttp3</groupId>
         <artifactId>okhttp</artifactId>
         <version>${okhttp.version}</version>
    </dependency>
    <dependency>
         <groupId>com.squareup.okhttp3</groupId>
         <artifactId>logging-interceptor</artifactId>
         <version>${okhttp.version}</version>
    </dependency>
</dependencies>

如果您不使用maven,也可以在构建路径中添加正确的库(Jar文件)

我希望这会对你有所帮助

答案 4 :(得分:0)

最新答案,是的,但是我为此苦了一个星期。想发布对我有用的解决方案。

如果您遇到此问题,则可能是由于现有的搜寻器为FUBAR。作为解决方法,您可以选择退出新发布的爬虫,以返回到旧版本。

以下是退出的方法:

登录到您的Play控制台。选择一个应用。选择发布管理>预发布报告>设置。在“发布前报告版本”部分中,将“退出”开关移至右侧,直到其变为蓝色。此后,启动报告将再次正确显示。