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

Orbit
quelle
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();
YacSrk
quelle
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"
}
Ajit Kumar Dubey
quelle
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();
Abilash Rajasekaran
quelle
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 :)

Neo
quelle
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!

Joe
quelle
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.

CoolMind
quelle