(Nachrüstung) Konverter für Klassenabsturz-App konnte nicht gefunden werden


81

Daher wurde Retrofit 2.0.0 kürzlich veröffentlicht und es gibt nicht wirklich aktualisierte Beispiele für die Verwendung, aber ich versuche, es für einen grundlegenden API-Aufruf zu implementieren. Ich bekomme eine

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

verursacht durch

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

Beim Versuch, die API anzurufen.


Ich weiß nicht, Retrofit, ich denke, es gibt eine Anmerkung, die den Konverter irgendwo angeben kann.
— Jiang YD

@ JiangYD nicht sicher, was du meinst
— Orbit

Sie müssen mehr Code zu diesem Fehler veröffentlichen. Poste deinen API-Anruf.
— Heloisasim

Das Beispiel auf square.github.io/retrofit löst diesen Fehler aus. Probieren Sie es aus, wenn Sie der Person, die die Frage stellt, nicht glauben oder wenn Sie Details wünschen. Sie versuchen nichts Besonderes zu tun.
— Andrew Koster

Antworten:


134

Ich stand vor dem gleichen Problem. Ich habe es behoben, indem ich hinzugefügt habe:

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

zu meinem build.gradle

Geben Sie dann den Konverter an, wenn Sie meine Retrofit-Instanz erstellen.

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

2
Also habe ich diese letzte Nacht behoben, indem ich diese 2 Klassen in mein Projekt kopiert und die aufgerufen habe .addConverterFactory(GsonConverterFactory.create()). Das Verbinden der Konverter über Gradle ist offensichtlich eine sauberere Option, daher wird dies als Antwort markiert.
— Orbit

1
Stellen Sie außerdem sicher, dass Ihre Version für converter-gsonIhre Version für sich retrofitselbst übereinstimmt
— Gravitron

Diese Antwort ist veraltet, Gradle wird nicht einmal mit dieser Version synchronisiert, geschweige denn kompiliert. Sie müssen 'com.squareup.retrofit2: converter-gson: 2.0.2' kompilieren
— Andrew Koster

15

In Retrofit 2.0 ist Converter nicht im Paket enthalten. Wenn Sie Retrofit 2.0 verwenden, stellen Sie sicher, dass Sie dem neuen URL-Muster folgen

Basis-URL: endet immer mit /

@Url: Beginne NICHT mit /

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

Weitere Informationen zu 2.0 finden Sie unter diesem Link. Nachrüstung 2.0: Das größte Update

Und auch build.gradle aktualisieren.

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

Fügen Sie die Erweiterung in die Datei build.gradle auf Projektebene ein

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

Diese Antwort enthält nicht die relevante Gradle-Abhängigkeit.
— Andrew Koster

@Ak Ich habe den besten größten Update-Link erwähnt, den sie all diese Dinge erwähnt haben. Notwendigkeit, API-Basis auf aktuelle Version zu aktualisieren
— Ajit Kumar Dubey

7

Nachrüstversion entsprechend ändern

Für mich war unter Abhängigkeit schon da

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

Für gson 2.0.2 habe ich mich geändert

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

Dann füge hinzu

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

Diese Antwort ist aktuell, sie sollte mehr Stimmen haben als die veraltete und mehr als die, die nicht einmal die relevante Abhängigkeit enthält.
— Andrew Koster

6

Fügen Sie für Retrofit V2 die folgenden Repositorys hinzu:

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'

Verwenden Sie nun den folgenden Code -

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

Hoffe es wird helfen :)


3

In der neuesten Version von Retrofit 2.0 sollten Sie die neueste Version importieren:

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'

Seien Sie vorsichtig, rufen baseUrl()Sie , in Version 2.0 auf, es sollte das Ende von "/" sein, und bei der Methode würden Sie die URL nicht mit "/" beginnen.

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

Und Sie können Retrofit sehen , um weitere Informationen zu erhalten! Hoffe Hilfe!


1

In meinem Fall (Kotlin mit Coroutinen) erhielt ich die Ausnahme:

Konverter für Retrofit2.Call kann nicht erstellt werden

für die Methode Queries.exportPdf.

Auslöser: java.lang.IllegalArgumentException: ResponseBody-Konverter für retrofit2.Call konnte nicht gefunden werden

Ein Problem war in einer Anfrage:

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

Aus suspendder Definition entfernt und Ausnahmen verschwunden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.