2014-10-02 33 views
11

使用任何的这些例子: http://developer.android.com/training/volley/request.html如何访问Volley中错误响应的内容?

我明白如何处理成功的请求的响应,以及如何检测和反应的误差。

但是,一个错误可能是(在其他情况下)来自服务器的40x或50x响应,在这种情况下,响应仍可能包含数据(标头和正文)。

但是,错误监听器只传递一个VolleyError对象(这是Exception的一个子类,如果我没有弄错)而不是一个Response对象。

如何访问错误响应的内容?

回答

4

在StringRequest例如:

@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

有一个'('缺少if语句,谢谢你的回答:) – 2017-02-20 20:22:14

23

VolleyError该对象具有networkResponse参考,其本身所具有的“数据”部件,它是响应主体的字节数组。如果你想在错误代码的情况下查看数据,你可以使用这样的东西:

@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... 
}