2014-10-02 14 views
11

Korzystanie z któregokolwiek z tych przykładów: http://developer.android.com/training/volley/request.htmlJak uzyskać dostęp do treści odpowiedzi o błędzie w Volley?

rozumiem jak przetwarzać odpowiedź udanego wniosku i jak wykrywać i reagować na błąd.

Jednak błąd może być (między innymi) odpowiedzią 40x lub 50x z serwera, w którym to przypadku odpowiedź może nadal zawierać dane (nagłówki i treść).

Ale detektor błędów otrzymuje tylko obiekt VolleyError (który jest podklasą wyjątku, jeśli się nie mylę), a nie obiekt odpowiedzi.

Jak uzyskać dostęp do treści odpowiedzi o błędzie?

Odpowiedz

4

W StringRequest np

@Override 
protected Response<String> parseNetworkResponse(NetworkResponse response) { 
    Map<String, String> responseHeaders = response.headers; 
    if response.statusCode == 401) { 
     // Here we are, we got a 401 response and we want to do something with some header field; in this example we return the "Content-Length" field of the header as a succesfully response to the Response.Listener<String> 
     Response<String> result = Response.success(responseHeaders.get("Content-Length"), HttpHeaderParser.parseCacheHeaders(response)); 
     return result; 
    } 
    return super.parseNetworkResponse(response); 
} 
+0

Istnieje "(" brak w wyrażeniu if, dziękuję za odpowiedź :) –

23

Przedmiotem VolleyError ma networkResponse odniesienia, który ma w sobie element „dane”, która jest tablicą bajt ciała reakcji. Jeśli chcesz wyświetlić dane w przypadku pojawienia się kodu błędu w odpowiedzi, możesz użyć czegoś takiego:

@Override 
public void onErrorResponse(VolleyError error) { 
    String body; 
    //get status code here 
    String statusCode = String.valueOf(error.networkResponse.statusCode); 
    //get response body and parse with appropriate encoding 
    if(error.networkResponse.data!=null) { 
     try { 
      body = new String(error.networkResponse.data,"UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
    } 
    //do stuff with the body... 
} 
Powiązane problemy