2016-04-01 12 views
8

Używam najnowszej (od teraz wersji 2.0.0-beta4) wersji Retrofit. Po odebraniu 200 kodu OK z serwera wszystko działa poprawnie. Ale chcę zajmować się nie ok odpowiedzi też, takie jak kod 401. Więc, muszę dostać kod odpowiedzi błędu, aby dowiedzieć się dokładnie, jakie działania należy robić i wyświetlać odpowiednie dane:Retrofit 2: responseBodyConverter konwertuje na obiekt zerowy

@Override 
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
    if (response != null && !response.isSuccess() && response.errorBody() != null) { 
     Converter<ResponseBody, APIError> errorConverter = retrofit.responseBodyConverter(APIError.class, new Annotation[0]); 
     try { 
      APIError error = errorConverter.convert(response.errorBody()); 
      Toast.makeText(getContext(), "code = " + error.getCode() + ", status = " + error.getStatus(), Toast.LENGTH_SHORT).show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } else if (null != response) { 
     if (response.isSuccess()) { 
      LoginResponse loginResponse = response.body(); 
      Toast.makeText(getContext(), "Successful login: " + loginResponse.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

APIError.java

public class APIError { 
    String name; 
    int status; 
    String message; 
    int statusCode; 
    String code; 
    String stack; 

    public String getName() { 
     return name; 
    } 

    public int getStatus() { 
     return status; 
    } 

    public String getCode() { 
     return code; 
    } 
} 

odpowiedź błąd serwera za

{ 
    "error": { 
    "name": "Error", 
    "status": 401, 
    "message": "login failed", 
    "statusCode": 401, 
    "code": "LOGIN_FAILED", 
    "stack": "Error: login failed" 
    } 
} 

Ale errorConverter.convert() zwraca obiekt z wartościami pustymi. Wyglądałem na similar posts, ale to nie pomogło.

Co jest nie tak z kodem?

Odpowiedz

2

znaleźć odpowiedź w futurestud.io bloga Komentarze:

Zmieniono APIError.java do tego:

public class APIError { 

    Error error; 

    public Error getError() { 
     return error; 
    } 

    public static class Error { 

     String name; 
     int status; 
     String message; 
     int statusCode; 
     String code; 
     String stack; 

     public String getName() { 
      return name; 
     } 

     public int getStatus() { 
      return status; 
     } 

     public String getCode() { 
      return code; 
     } 

    } 
} 
+1

__futurestud.io__ zapewnia najlepszy ** ** modernizowanych samouczek –

Powiązane problemy