Cómo manejar el error en Retrofit 2.0
Quiero manejar el error en Retrofit 2.0
Got, por ejemplo, code=404
y body=null
, pero errorBody()
contiene datos en ErrorModel
( Boolean status
y String info
).
- ¿Cómo usar AutoValue con Retrofit 2?
- Cómo crear varias devoluciones de Retrofit en el mismo fragmento - android
- Android Retrofit2 Actualizar Oauth 2 Token
- Analizar matriz anidada dinámica en Android Retrofit
- Retrofit "IllegalStateException: Ya ejecutado"
Esto es errorBody().content
: [text=\n{"status":false,"info":"Provided email doesn't exist."}]
.
¿Cómo puedo obtener estos datos?
¡Gracias por ayudarme!
Este es mi código para la solicitud de Retrofit:
ResetPasswordApi.Factory.getInstance().resetPassword(loginEditText.getText().toString()) .enqueue(new Callback<StatusInfoModel>() { @Override public void onResponse(Call<StatusInfoModel> call, Response<StatusInfoModel> response) { if (response.isSuccessful()) { showToast(getApplicationContext(), getString(R.string.new_password_sent)); } else { showToast(getApplicationContext(), getString(R.string.email_not_exist)); } } @Override public void onFailure(Call<StatusInfoModel> call, Throwable t) { showToast(getApplicationContext(), "Something went wrong..."); } });
- Convertidor personalizado para Retrofit 2
- Interfaz de deserialización de Gson para su implementación Class
- Cómo hacer una solicitud múltiple y esperar hasta que los datos provengan de todas las solicitudes en retrofit 2.0 - android
- Retrofit2 Condición de manejar cuando el código de estado 200 pero la estructura de json diferente a la clase de datamodel
- ¿Por qué Retrofit se utiliza con RxJava
- ¿Es posible mostrar la barra de progreso cuando se descarga a través de Retrofit 2 Asynchronous?
- Error de actualización - Falta la dirección URL @GET o el parámetro @Url
- Comprobación de Internet, dónde colocar al usar MVP, RX y Retrofit
Si desea obtener datos cuando se produce una respuesta de error ( normalmente un código de respuesta excepto 200 ), puede hacerlo así en su método onResponse()
:
if (response.code() == 404) { Gson gson = new GsonBuilder().create(); YourErrorPojo pojo = new YourErrorPojo(); try { pojo = gson.fromJson(response.errorBody().string(), YourErrorPojo.class); Toast.makeText(getApplicationContext(), pojo.getInfo(), Toast.LENGTH_LONG).show(); } catch (IOException e) { } }
Al generar YourErrorPojo.class
siguientes pasos:
-
Ir a Json Schema 2 Pojo
-
Pegue su ejemplo
Json
, y seleccione el tipo de fuente Json , anotación Gson -
Su ejemplo
Json
es:{"status":false,"info":"Provided email doesn't exist."}
- Haga clic en Vista previa y generará su clase
Pojo
para usted.
Agregue esto a su build.gradle
: compile 'com.google.code.gson:gson:2.7'
He utilizado Gson
en esta solución, pero puede obtener su Json
como: response.errorBody().string()
y manejar, hacer algo que quieras.
Retrofit no ve 404 como un fracaso, por lo que entrará en el onSuccess.
response.isSuccessful()
es true si el código de respuesta está en el rango de 200-300, por lo que entrará en el else allí.
if (response.isSuccessful()) { showToast(getApplicationContext(), getString(R.string.new_password_sent)); } else { // A 404 will go here showToast(getApplicationContext(), getString(R.string.email_not_exist)); }
Sin embargo, como su respuesta no tuvo éxito, no obtiene el cuerpo de respuesta con .body()
, pero con errorBody()
, errorBody se llenará cuando la solicitud sea un éxito, pero response.isSuccessful()
devuelve false Un código de estado que no es 200-300).
- Puntero nulo en ExpandedView para la búsqueda de ActionBar
- Cómo detener la llamada onCreateView cuando cambia de ficha diferente (como tab1, tab2) en android?