Manejar errores específicos enviando otra solicitud de forma transparente en modernidad

StackOverflow https://stackoverflow.com//questions/22014958

  •  21-12-2019
  •  | 
  •  

Pregunta

Aquí está el caso que estoy tratando de manejar,

  • Si se ejecuta una solicitud, y la respuesta indica que se caduca el token de autenticación,
  • Enviar una solicitud de actualización de token
  • Si la solicitud de actualización de token tiene éxito, vuelva a intentar la solicitud original

Esto debería ser transparente a la actividad de llamadas, fragmento ... etc. Desde el punto de vista de la persona que llama, es una solicitud y una respuesta.

He logrado este flujo antes de usar OkhttpClient directamente, pero no sé cómo lograr esto en la reequipación.

Tal vez algo relacionado con esta abierta problema ¿Sobre una respuestaInteperceptor?

Si no hay una forma directa para lograr esto en la modernización, ¿cuál sería la mejor manera de implementarlo?¿Una clase de escucha base?

También estoy usando Robospice con reequipamiento, si puede ser útil en tal caso.

¿Fue útil?

Solución

Desde que estoy usando Robospice, terminé haciendo esto creando un extracto de BaseRequestListener.

public abstract class BaseRequestListener<T> implements RequestListener<T> {

    @Override
    public void onRequestFailure(SpiceException spiceException) {
        if (spiceException.getCause() instanceof RetrofitError) {
            RetrofitError error = (RetrofitError) spiceException.getCause();
            if (!error.isNetworkError() 
                && (error.getResponse().getStatus() == INVALID_ACCESS_TOKEN_STATUS_CODE)) {
                //I'm using EventBus to broadcast this event,
                //this eliminates need for a Context
                EventBus.getDefault().post(new Events.OnTokenExpiredEvent());
                //You may wish to forward this error to your listeners as well,
                //but I don't need that, so I'm returning here.
                return;
                }
         }
         onRequestError(spiceException);
    }

    public abstract void onRequestError(SpiceException spiceException);
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top