(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.