Не удалось разрешить java.lang.NoSuchMethodError с библиотекой GSON

Я пытался создать образец программы 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)

Мне не хватает какой-либо зависимой банки?

Я пытаюсь использовать Retrofit в автономном приложении Java и тестирую образцы, чтобы привыкнуть к нему. Было бы здорово, если бы кто-нибудь указал мне на простой образец программы, демонстрирующий работу Retrofit, даже образец более ранней версии был бы хорош.


person moooni moon    schedule 24.03.2016    source источник
comment
Я использовал код из упомянутой мной ссылки -github.com/square/retrofit/blob/master/samples/src/main/java/   -  person moooni moon    schedule 25.03.2016
comment
Я думаю, что эта ошибка возникает, когда JVM не может найти в пути к классу?   -  person Sam Orozco    schedule 25.03.2016
comment
Итак, как вы думаете, я пропустил добавление какой-то другой необходимой библиотеки?   -  person moooni moon    schedule 25.03.2016


Ответы (5)


попробуйте добавить это в градле:

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

это хорошо работает для меня :)

person Yakami    schedule 03.08.2016
comment
gson 2.8.0 дал мне NoSuchMethodError, понижение до 2.6.2 сработало. - person Yenchi; 23.01.2017

Вот некоторые зависимости, которые могут вам помочь.

GSON и модернизация

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. Пожалуйста, проверьте URL-адрес в браузере.

дайте мне знать, если проблема все еще сохраняется.

person DearDhruv    schedule 08.09.2016

Попробуй это:

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'
person rafakob    schedule 25.03.2016
comment
Я устал использовать версию jar, как вы предложили, но я все еще получаю следующую ошибку. Исключение в потоке main java.lang.NoSuchMethodError: com.google.gson.Gson.newJsonReader(Ljava/io/Reader;)Lcom/google/gson/stream/JsonReader; в retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:35) - person moooni moon; 25.03.2016
comment
Мой текущий путь к классу имеет банки ниже. okio-1.6.0.jar модернизация-2.0.0.jar okhttp-3.2.0.jar okhttp-urlconnection-3.2.0.jar gson-2.4.jar конвертер-gson-2.0.0.jar - person moooni moon; 25.03.2016
comment
Удалите файл jar и то, что он скажет вашему грейблу - person Raphael Teyssandier; 26.03.2016
comment
Я не использую Gradle или даже Maven, я использую ANT для своего проекта, который является автономным приложением Windows. Я не уверен, что вы могли бы сделать это с помощью ANT. - person moooni moon; 28.03.2016

У меня была такая же проблема, когда я использовал API Alfresco Rest в своем приложении JEE. Я решил проблему, добавив эти зависимости 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>

Или вы можете добавить правильные библиотеки (файлы Jar) в свой путь сборки, если вы не используете maven

Я надеюсь, что это поможет вам

person Hafaiedh Chedly    schedule 21.03.2018

Поздний ответ, да, но я боролся с этим неделю. Хотел опубликовать решение, которое сработало для меня.

Если вы получаете эту проблему, это может быть связано с тем, что существующий сканер является FUBAR. В качестве обходного пути вы можете вернуться к предыдущей версии сканера, отказавшись от новой версии.

Вот как отказаться:

Войдите в свою игровую консоль. Выберите приложение. Выберите Управление выпуском > Отчет о предварительном запуске > Настройки. В разделе «Версия отчета перед запуском» переместите переключатель Opt-out вправо, пока он не станет синим. После этого отчеты о запуске снова отображаются корректно.

person seekingStillness    schedule 28.07.2018