Sto utilizzando OkHttp con Retrofit per effettuare le richieste di rete della mia app. Sto anche utilizzando Interceptor per l'autenticazione e ritentare le richieste, se necessario.Errore di ritorno dall'intercettore OKHttp (utilizzando il retrofit)
Il server a volte presenta problemi temporanei e restituisce un corpo vuoto anche se lo stato della risposta è 200 OK. Ciò causa l'arresto anomalo della mia app, poiché viene chiamato il blocco di successo del callback di Retrofit, l'oggetto personalizzato restituito (e analizzato con GSON) è nullo e il codice nella callback di successo presuppone che venga restituito un oggetto.
Ho già segnalato questo al team del server, ma voglio correggerlo anch'io, senza dover avvolgere tutto il codice di callback di successo su tutta l'app con assegni nulli.
Currenty Sono propenso a due opzioni, anche se altre idee sono i benvenuti: 1) Non ritorno dalla intercettore (è presente anche possibile) e solo la visualizzazione di un errore di dialogo 2) Ritornando qualcosa che vi farà retrofit? chiamare la parte di errore del callback.
Il mio codice è di sotto. Come puoi vedere, riprovo la richiesta per un massimo di 3 volte quando viene ricevuto un corpo vuoto.
@Override
public Response intercept(Chain chain) throws IOException
{
// First
Request request = chain.request();
Response response = chain.proceed(request);
....
....
....
// Retry empty body response requests for a maximum of 3 times
Integer retryMaxCount = 3;
MediaType contentType = response.body().contentType();
String bodyString = response.body().string();
while (bodyString.length() == 0 && retryMaxCount > 0)
{
//Empty body received!, Retrying...
retryMaxCount--;
response = chain.proceed(request);
bodyString = response.body().string();
}
if (bodyString.length() != 0)
{
// Create and return new response because it was consumed
ResponseBody newResponseBody = ResponseBody.create(contentType, bodyString);
return response.newBuilder().body(newResponseBody).build();
}
else
{
// WHAT TO WRITE HERE???
}
}
Grazie mille.
Perché non generare un'eccezione dall'intercettore? – mastov
Grazie mille. E 'stato semplice Se lo pubblichi come risposta, lo accetto. :) –
@mastov Se si genera un errore lì, l'app non si bloccherà? Come gestisci l'errore/propagalo alla richiamata? – Singed