(Modernizacja) Nie można zlokalizować konwertera dla aplikacji powodującej awarię klas


82

Tak więc Retrofit 2.0.0 został niedawno wydany i tak naprawdę nie ma żadnych zaktualizowanych przykładów jego użycia, ale próbuję zaimplementować go dla podstawowego wywołania API. Dostaję

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

spowodowany

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

Podczas próby wywołania interfejsu API.


nie wiem Retrofit, myślę, że jest adnotacja, która może gdzieś określić konwerter.
Jiang YD

@JiangYD nie jestem pewien, co masz na myśli
Orbit

musisz wysłać więcej kodu na temat tego błędu. Opublikuj wywołanie API.
heloisasim

Przykład na square.github.io/retrofit zgłasza ten błąd. Spróbuj, jeśli nie wierzysz osobie zadającej pytanie lub chcesz poznać szczegóły. Nie próbują robić nic wymyślnego.
Andrew Koster

Odpowiedzi:


135

Miałem ten sam problem. Naprawiłem to, dodając:

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

do mojego build.gradle

Następnie określ konwerter podczas tworzenia mojej instancji Retrofit.

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

2
Naprawiłem to zeszłej nocy, po prostu kopiując te dwie klasy do mojego projektu i wywołując plik .addConverterFactory(GsonConverterFactory.create()). Łączenie konwerterów za pomocą gradle jest oczywiście czystszą opcją, więc oznaczenie tego jako odpowiedzi.
Orbit

1
Upewnij się również, że Twoja wersja converter-gsonpasuje do Twojej wersji retrofit- zobacz stackoverflow.com/questions/32902157/ ...
gravitron

Ta odpowiedź jest nieaktualna, Gradle nawet nie zsynchronizuje się z tą wersją, a tym bardziej nie skompiluje. Musisz skompilować „com.squareup.retrofit2: converter-gson: 2.0.2”
Andrew Koster

15

W programie Retrofit 2.0, konwerter nie jest zawarty w pakiecie, a gdy używasz Retrofit 2.0, upewnij się, że postępuj zgodnie z nowym wzorcem adresu URL

Podstawowy adres URL: zawsze kończy się na /

@Url: NIE zaczynaj od /

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

Aby uzyskać więcej informacji na temat 2.0, kliknij ten link. Retrofit 2.0: największa aktualizacja

A także zaktualizuj build.gradle.

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

I dodaj rozszerzenie w pliku build.gradle na poziomie projektu

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

Ta odpowiedź nie obejmuje odpowiedniej zależności Gradle.
Andrew Koster

@Ak Wspomniałem o najlepszym największym linku do aktualizacji, o którym wspomnieli. Konieczność aktualizacji API do aktualnej wersji
Ajit Kumar Dubey

7

Zmień odpowiednio wersję modernizacji

Dla mnie poniżej zależność już tam była

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

Dla gson 2.0.2 zmieniłem

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

Następnie dodaj

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

Ta odpowiedź jest aktualna, powinna mieć więcej głosów niż ta nieaktualna i więcej niż ta, która nawet nie zawiera odpowiedniej zależności.
Andrew Koster

6

W przypadku Retrofit V2 dodaj następujące repozytoria -

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'

Teraz użyj poniższego kodu -

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

Mam nadzieję, że to pomoże :)


3

W najnowszym Retrofit 2.0 należy zaimportować najnowszą wersję:

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'

Uważaj, wywołanie baseUrl(), w wersji 2.0, powinno kończyć się znakiem „/”, aw metodzie nie rozpoczynałbyś url od znaku „/”

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

I możesz zobaczyć Retrofit, aby uzyskać więcej informacji! Mam nadzieję, że pomogę!


1

W moim przypadku (Kotlin z coroutines) otrzymałem wyjątek:

Nie można utworzyć konwertera dla retrofit2.Call

dla metody Queries.exportPdf.

Przyczyna: java.lang.IllegalArgumentException: nie można zlokalizować konwertera ResponseBody dla retrofit2.

Wystąpił problem w żądaniu:

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

Usunięto suspendz definicji i zniknęły wyjątki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.