Ich habe Probleme, Modellklasse in Retrofit lib zu verwenden. Der Name eines Back-End-Felds wurde geändert.Ist eine Nachrüstung ohne Modellklasse möglich?
Ist es möglich, eine Antwort ohne Modellklasse zu bekommen?
Ich habe Probleme, Modellklasse in Retrofit lib zu verwenden. Der Name eines Back-End-Felds wurde geändert.Ist eine Nachrüstung ohne Modellklasse möglich?
Ist es möglich, eine Antwort ohne Modellklasse zu bekommen?
Ist es möglich, Antwort ohne Modellklasse
zu bekommen Wenn ich Sie recht verstehe - sicher. Sie müssen die Antwort JSON nicht automatisch konvertieren. Sie können dies bei Bedarf leicht manuell durchführen, indem Sie eine rohe Antwort abrufen. Sobald Sie das haben, können Sie tun, was Sie brauchen.
danke Mr.Marcin Orlowski. Problem behoben – Vadivel
Es ist durchaus möglich, unterschiedliche Rückgabewerte zu verwenden. Ich nehme an, dass Sie derzeit Gson verwenden, um JSON-Antworten zu deserialisieren, und sie werden in die tatsächliche Klasse konvertiert. Sie können jedoch die zurückgegebene Antwort in JsonElement
(oder eine spezifischere JSON-Klasse) konvertieren. In diesem Fall erhalten Sie ein JSON-Element, das Sie beliebig manipulieren können. Etwas wie:
@GET("url")
Call<JsonElement> apiCall();
Ich glaube nicht, dass der Konverter das Problem ist. OP sagt, dass ein JSON Feld sich geändert hat, deshalb die möglichen JSON Annotationen annultierend, die Jackson oder Gson zur Verfügung stellen würden –
Danke Herrn Malcolm, reparierte ich das Problem – Vadivel
@Vadivel Sie können die Antworten aufladen, die Ihnen halfen, und vergessen Sie nicht, das anzunehmen eine, die dir am meisten geholfen hat. – Malcolm
Ja, Sie können. entsprechend Ihrer Antwort anstelle von Modellklasse
@POST("url")
Call<JsonObject> register(@Query("name") String name,
@Query("password") String password);
Gerade JsonArray oder JsonObject schreiben.
Dann erhalten Daten von JsonObject oder JsonArray, die Sie als Antwort erhalten, wie unten
Call<JsonObject> call = application.getServiceLink().register();
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
JsonObject object = response.body();
//parse object
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
}
});
können Sie einfach „umbenennen“ Feld auf Ihrer Seite mit
@SerializedName("newFieldName")
SomeClass oldField;
@Vadivel hier ist es die Version von GET basierend auf @ Chetan Arbeit:
@GET("http://your.api.url")
Call<JsonObject> getGenericJSON();
Call<JsonObject> call = api.getGenericJSON();
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
if (response.isSuccessful() && response.body() != null) {
Log.d(TAG, response.body().toString());
} else {
Log.e(TAG, "Error in getGenericJson:" + response.code() + " " + response.message());
}
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.e(TAG, "Response Error");
}
});
siehe http://stackoverflow.com/questions/37119905/retrofit-2-without- Modell-Klasse – sasikumar
Wenn Ihr Back-End nicht zuverlässig ist, dann kann Retrofit die falsche Bibliothek sein. Einfach bei OkHttp bleiben –
Frage macht nicht Sinn ... * Nachrüstung - ** Typ-sicher ** HTTP-Client für Android und Java von Square, Inc. * ... * Ist es möglich, eine Antwort ohne Modellklasse zu erhalten? * ** dann, was Sie am Ende bekommen könnten? ** – Selvin