2016-04-22 39 views
6

quando ho all'utente la Biblioteca OkHttp con un modo asincrono come questo:OkHttp codice di stato di risposta nel metodo onFailure

call.enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) { 
      e.printStackTrace(); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 

     } 
    }); 

Nel metodo onFailure, come ottenere il codice di stato di risposta per distinguere i diversi errori. Ad esempio, errore di rete o errore del server?

+2

onFaliure copre solo eccezioni come timeout, ecc. Se si desidera rilevare un errore di risposta come 400, è possibile raggiungere il codice di stato dal metodo onResponse response.code() –

risposta

4

Per quanto mi ricordo, onFailure viene attivato quando non si riceve risposta. Quindi, se ricevi un errore, verrà chiamato onResponse. Si può fare qualcosa di simile in onResponse:

@Override 
public void onResponse(Call call, Response response) throws IOException { 
    switch(response.code()){ 
    //your desired catched codes here. 

    } 
} 

E official doc per onResponse metodo:

Nota che il successo a livello di trasporto (la ricezione di un codice di risposta HTTP, le intestazioni e il corpo) non indica necessariamente applicazione - successo: la risposta può ancora indicare un infelice codice di risposta HTTP come 404 o 500.

+1

Grazie a @skadoosh per fornire il collegamento docs. – yennsarah

+0

Grazie per la tua risposta molto! @Amy – YiFeng

4

https://github.com/square/okhttp/issues/1769

Secondo il link, al di sopra, onFailure() si chiama se e solo se ci sono stati problemi con il client.

Se la richiesta è stata recapitata correttamente ma si è verificato un problema con il server, è possibile verificare response.isSuccessful(). Se restituisce false, controllare response.code() e gestire l'errore.

0

Si controlla che usando response.code() È inoltre possibile utilizzare response.message() per ottenere maggiori informazioni.

Problemi correlati