Domanda

Ecco il caso che sto cercando di gestire,

    .
  • Se viene eseguita una richiesta, e la risposta indica che il token dell'auth è scaduto,
  • Invia una richiesta di aggiornamento del token
  • Se la richiesta del token di aggiornamento ha successo, riprova la richiesta originale

Questo dovrebbe essere trasparente per l'attività chiamante, il frammento ... ecc. Dal punto di vista del chiamante, è una richiesta e una risposta.

Ho raggiunto questo flusso prima quando si utilizza direttamente OKHTTPCLINT, ma non so come ottenere questo in retrofit.

Forse qualcosa correlato a questo aperto Edizione A proposito di un reazione intercettore?

Se non c'è un modo diretto per ottenere questo in retrofit, quale sarebbe il modo migliore per implementarlo?Una classe di ascolto di base?

Sto usando anche robospice con retrofit, se può essere utile in tal caso.

È stato utile?

Soluzione

Dato che sto usando robospice, ho finito per farlo creando un BaseRequestListener astratto.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top