android retrofit rx-java rx-android

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