(Модернізація) Не вдалося знайти конвертер для програми, що аварійно завершує роботу


82

Отож нещодавно було випущено Retrofit 2.0.0, і насправді не існує жодних оновлених прикладів того, як ним користуватися, але я намагаюся реалізувати його для базового виклику API. Я отримую

java.lang.IllegalArgumentException: Unable to create converter for class` 

спричинений

Caused by: java.lang.IllegalArgumentException: Could not locate converter for class orbyt.app.dataclass. Tried:
* retrofit.OkHttpBodyConverterFactory

При спробі зробити дзвінок api.


не знаю модернізації, мабуть, є анотація, яка може десь вказати перетворювач.
Jiang YD

@JiangYD не впевнений, що ти маєш на увазі
Орбіта

вам потрібно розмістити більше коду про цю помилку. Опублікуйте ваш дзвінок API.
heloisasim

Приклад на square.github.io/retrofit видає цю помилку. Спробуйте, якщо ви не вірите тому, хто задає питання, або якщо вам потрібні деталі. Вони не намагаються зробити нічого вигадливого.
Ендрю Костер

Відповіді:


135

Я стикався з тим же питанням. Я виправив це, додавши:

compile 'com.squareup.retrofit2:converter-gson:<latest-version>'

до мого build.gradle

Потім вкажіть конвертер під час створення мого примірника модернізації.

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

2
Тож я виправив це вчора ввечері, фактично скопіювавши ці 2 класи в свій проект і зателефонувавши до .addConverterFactory(GsonConverterFactory.create()). Пов’язування перетворювачів за допомогою gradle, очевидно, є чистішим варіантом, тому позначте це як відповідь.
Орбіта

1
Також переконайтесь, що ваша версія converter-gsonвідповідає retrofitсамій вашій версії - див. Stackoverflow.com/questions/32902157/…
gravitron

Ця відповідь застаріла, Gradle навіть не синхронізується з цією версією, а тим більше компілювати. Вам потрібно скомпілювати 'com.squareup.retrofit2: converter-gson: 2.0.2'
Ендрю Костер

15

У Retrofit 2.0 Converter не входить до пакету, і коли ви використовуєте Retrofit 2.0 Переконайтеся, що дотримуєтесь нового шаблону URL-адреси

Базова URL-адреса: завжди закінчується на /

@Url: НЕ починати з /

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Constants.API_BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

Для отримання додаткової інформації про 2.0 Перейдіть за цим посиланням Модернізація 2.0: Найбільше оновлення

А також оновити build.gradle.

implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"

І додайте розширення у файл build.gradle рівня проекту

ext {
retrofit_version= "2.x.x"
}

Ця відповідь не включає відповідну залежність Gradle.
Ендрю Костер

@Як я згадав найкраще посилання на найбільше оновлення, вони згадали все це. Потрібно оновити основу API для поточної версії
Ajit Kumar Dubey

7

Відповідно змініть версію модернізації

Для мене нижче залежність вже була

compile 'com.squareup.retrofit2:retrofit:2.0.2'

Для gson 2.0.2 я змінився

compile 'com.squareup.retrofit2:converter-gson:2.0.2'

Потім додайте

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

Ця відповідь актуальна, вона повинна мати більше голосів, ніж застаріла, і більше, ніж та, яка навіть не включає відповідну залежність.
Ендрю Костер

6

Для Retrofit V2 додайте наступні сховища -

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

Тепер використовуйте код нижче -

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

Сподіваюся, це допоможе :)


3

В останній модернізації 2.0 слід імпортувати останню версію:

compile 'com.squareup.retrofit2:retrofit:2.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'

Будьте обережні, зателефонуйте baseUrl(), на v2.0, він повинен закінчуватись "/", а в методі ви не починаєте thr url з "/"

@POST("classes/info")
Call<ContactBean> insertInfo(@Body ContactBean bean);

І ви можете побачити модернізацію, щоб отримати більше інформації! Сподіваюся на допомогу!


1

У моєму випадку (Котлін із супровідними програмами) я отримав виняток:

Не вдається створити конвертер для retrofit2.Call

для методу Queries.exportPdf.

Викликано: java.lang.IllegalArgumentException: Не вдалося знайти перетворювач ResponseBody для модернізації2.Call

Проблема була в запиті:

@FormUrlEncoded
@Streaming
@POST("export-pdf/")
suspend fun exportPdf(
    @Field("token") token: String
): Call<ResponseBody>

Вилучено suspendз визначення та винятки зникли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.