2016-01-06 3 views
0

Я хочу получить error, когда это произойдет. Итак, для этого я поместил переменную в свой класс для error. И у меня есть переменная для «нормального тела».Класс GSON с разным корпусом (ошибка/NoError)

public class User { 
    @SerializedName("error") 
    public Error ErrorUser; 

    @SerializedName("infos") 
    public Infos Infos; 

    public class Infos { 
     @SerializedName("login") 
     public String Login; 

     @SerializedName("lastname") 
     public String LastName; 

     @SerializedName("firstname") 
     public String FirstName; 

     @SerializedName("email") 
     public String Email; 

     @SerializedName("internal_email") 
     public String EmailIntern; 

     @SerializedName("location") 
     public String Location; 

     @SerializedName("netsoul") 
     public String Netsoul; 

     @SerializedName("studentyear") 
     public int SchoolYear; 

     public Infos(String login, 
        String lastname, 
        String firstName, 
        String email, 
        String emailIntern, 
        String location, 
        String netsoul, 
        int schoolYear){ 
      this.Login = login; 
      this.LastName = lastname; 
      this.FirstName = firstName; 
      this.Email = email; 
      this.EmailIntern = emailIntern; 
      this.Location = location; 
      this.Netsoul = netsoul; 
      this.SchoolYear = schoolYear; 
     } 
    } 

    public User(Error error){ 
     Log.d("Here", "Work"); 
     this.ErrorUser = error; 
    } 

    public User(Infos infos){ 
     this.Infos = infos; 
    } 
} 

С нормальным телом (класс) Информации эту работу, но когда я пытаюсь получить ошибку, когда это происходит я получаю user.ErrorUser on reference null object. Поэтому я предполагаю, что user имеет значение null, но я не знаю почему.

Вызов

ApiService.getApiService().getInformationUser(SessionManager.getInstance().getToken()).enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Response<User> response, Retrofit retrofit) { 
       User user = response.body(); 
       if (user.ErrorUser == null) 
        Log.d("Here", user.Infos.FirstName); 
       else 
        Log.d("Here", user.ErrorUser.Message); 
      } 

      @Override 
      public void onFailure(Throwable t) { 

      } 
     }); 

Класс ошибки

public class Error { 
    @SerializedName("error") 
    public String Message; 

    @SerializedName("code") 
    public int Code; 

    public Error(String message, int code){ 
     this.Message = message; 
     this.Code = code; 
    } 
} 

Если message и code это иногда обратное развитие, мне нужен другой конструктор?

+0

Возможный дубликат http://stackoverflow.com/questions/31516581/retrofit-handle-json-key-which-has-a-dynamic-structure-array-object –

+0

Это не совсем то же самое Probleme. –

ответ

0

Я решил это, с response.errorBody(), который содержит код ошибки и сообщение в строке. Я конвертирую его с GsonConverter() в мой класс Error.

try { 
     Error error = (Error) GsonConverterFactory.create().fromResponseBody(Error.class, Error.class.getAnnotations()).convert(response.errorBody()); 
     Toast.makeText(this.login.getApplicationContext(), error.errorBody.Message, Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
Смежные вопросы