2017-01-30 2 views
-1

Ich bekomme null, wenn ich meine json Fehlerantwort von der Nachrüstung auf ein Objekt umwandle.gson.fromJson gibt null android Retrofit zurück und gson

JSON-String:

{"messageType":1,"hasErrors":true,"isSuccess":false,"message":"Invalid username or password"} 

Die Klasse I erstellt:

public class ValidationContainer { 


@SerializedName("messageType") 
@Expose 
private int MessageType; 

@SerializedName("hasErrors") 
@Expose 
private Boolean HasErrors; 

@SerializedName("isSuccess") 
@Expose 
private Boolean IsSuccess; 

@SerializedName("message") 
@Expose 
private String Message; 


public ValidationContainer() { 
} 

public String getMessage() { 
    return Message; 
} 

public void setMessage(String message) { 
    this.Message = message; 
} 

}

Mein Code:

  public void onResponse(Call<UserDTO> call, Response<UserDTO> response) { 

       if (response.isSuccessful()) { 
        //TODO: Save response user properties to shared constants 

        Intent intent = new Intent(getBaseContext(), MainActivity.class); 
        startActivity(intent); 
        finish(); 
       } else if (response.code() == 400) { 

        Gson gson = new GsonBuilder().create(); 
        ValidationContainer container = new ValidationContainer(); 

        try { 
         Log.e(Tag, response.errorBody().string()); 
         container = gson.fromJson(response.errorBody().string(), ValidationContainer.class); 

         Log.e(Tag, container.getMessage()); 

        } catch (IOException e) { 

         Log.e(Tag, e.getMessage()); 

        } 
       } 
      } 

Als ich log response.errorBody().string() ich folgendes erhalten:

enter image description here

In build.gradle

compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
compile 'com.google.code.gson:gson:2.6.1' 

Was mache ich falsch?

+0

Versuch zu ändern 'UserDTO' zu' ValidationContainer' implementiert haben. –

+0

@DheerubhaiBansal Aber ich möchte den Fehler konvertieren nicht die Erfolgsantwort –

+0

freundlicherweise ändern Sie Ihre Bibliothek Version zu 'com.google.code.gson: gson: 2.6.2' –

Antwort

1

die Lösung gefunden, basierend auf diesen Link: https://futurestud.io/tutorials/retrofit-getting-started-and-android-client

public void onResponse(Call<UserDTO> call, Response<UserDTO> response) { 

    if (response.isSuccessful()) { 
     //TODO: Save response user properties to shared constants 

     Intent intent = new Intent(getBaseContext(), MainActivity.class); 
     startActivity(intent); 
     finish(); 

    } else if (response.code() == 400) { 

     Converter<ResponseBody, ValidationContainer> converter = 
       retrofit.responseBodyConverter(ValidationContainer.class, new Annotation[0]); 

     try { 
      ValidationContainer error = converter.convert(response.errorBody()); 

      Toast.makeText(getBaseContext(), error.getMessage(), Toast.LENGTH_LONG).show(); 

     } catch (Exception e) { 
      Log.d(Tag, e.getMessage()); 
     } 

    } 
} 
-1

Bitte eigentlichen Code einfügen, weil ich Gson Parsing für das Parsen jede IO Ausnahme erfordern nicht denken, wie ich Sie verwenden sie sehen können.

versuchen auch nach dem Entfernen if (response.code() == 400)

+0

was meinst du nach dem eigentlichen Code - der Code in geschrieben die Frage ist der eigentliche Code –

0

Bitte senden Sie Fehlermeldung in Protokoll zunächst dachte ich, Sie Serializable Schnittstelle

public class ValidationContainer implements Serializable { 

} 
+0

gibt es keine Fehlermeldung –

+0

hat es funktioniert? Wenn nicht, versuchen Sie es, indem Sie @Expose entfernen –

Verwandte Themen