2016-11-09 3 views
2

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?

+0

siehe http://stackoverflow.com/questions/37119905/retrofit-2-without- Modell-Klasse – sasikumar

+4

Wenn Ihr Back-End nicht zuverlässig ist, dann kann Retrofit die falsche Bibliothek sein. Einfach bei OkHttp bleiben –

+0

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

Antwort

1

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.

+0

danke Mr.Marcin Orlowski. Problem behoben – Vadivel

0

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(); 
+2

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 –

+0

Danke Herrn Malcolm, reparierte ich das Problem – Vadivel

+0

@Vadivel Sie können die Antworten aufladen, die Ihnen halfen, und vergessen Sie nicht, das anzunehmen eine, die dir am meisten geholfen hat. – Malcolm

3

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) { 

      } 
     }); 
+0

Hallo, danke für Ihre Antwort, ich hatte illegale Argument Exception, kann mir bitte sagen, wie Retrofit zu definieren.Es funktioniert nicht in GET-Methode – Vadivel

+0

Danke Mr.chetan, Problem behoben – Vadivel

0

können Sie einfach „umbenennen“ Feld auf Ihrer Seite mit

@SerializedName("newFieldName") 
SomeClass oldField; 
2

@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"); 
    } 
}); 
Verwandte Themen