android - ¿Cómo obtengo el cuerpo de Respuesta cuando hay un error al usar los Observables de Retrofit 2.0?
rx-java rx-android (2)
Puede agregar este bloque de código para mostrar el mensaje de error.
@Override
public void onFailure(Throwable t) {
if (t instanceof HttpException) {
ResponseBody body = ((HttpException) t).response().errorBody();
Gson gson = new Gson();
TypeAdapter<ErrorParser> adapter = gson.getAdapter
(ErrorParser
.class);
try {
ErrorParser errorParser =
adapter.fromJson(body.string());
Logger.i(TAG, "Error:" + errorParser.getError());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Estoy usando Retrofit 2.0 para hacer llamadas a la API que devuelven Observables. Todo funciona bien cuando la llamada fue bien y la respuesta es la esperada. Ahora digamos que tenemos una respuesta de error, lanza un error en on. Me gustaría leer el cuerpo de respuesta incluso cuando es un error.
Ejemplo
@FormUrlEncoded
@POST("tokenLogin")
Observable<LoginResponse> loginWithToken(
@Field("token") String pin
);
Cuando la solicitud y la respuesta son válidas, obtengo la observación correcta y se llama a OnError como se esperaba cuando hay un error.
Respuesta correcta:
{ "status" : "authenticated" }
El Observable convierte esto en el Observable correcto y puedo leer la respuesta como objeto LoginResponse.
Ahora, la respuesta de error es la siguiente:
{ "errorMessage" : "You need to take some xyz action" }
Me gustaría leer esa respuesta de error y mostrar el mensaje al usuario. ¿Cómo hago para hacer eso?
Solo verifique si el objeto de lanzamiento es una instancia de HttpException y luego puede acceder a la respuesta de modificación.
if (e instanceof HttpException) {
ResponseBody body = ((HttpException) e).response().errorBody();
...
}
Luego puede usar el convertidor para deserializarlo (o hacerlo usted mismo).