これらの例のいずれかを使用: http://developer.Android.com/training/volley/request.html
成功したリクエストの応答を処理する方法、およびエラーを検出して対応する方法を理解しています。
ただし、エラーは(他の状況の中で)サーバーからの40倍または50倍の応答である場合があります。その場合、応答にはデータ(ヘッダーと本文)が含まれている可能性があります。
ただし、エラーリスナーには、VolleyErrorオブジェクト(誤っていない場合はExceptionのサブクラス)のみが渡され、Responseオブジェクトは渡されません。
エラー応答のコンテンツにアクセスするにはどうすればよいですか?
たとえば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 successfully response to the Response.Listener<String>
Response<String> result = Response.success(responseHeaders.get("Content-Length"), HttpHeaderParser.parseCacheHeaders(response));
return result;
} // else any other code that carries a message
return super.parseNetworkResponse(response);
}
VolleyError
オブジェクトにはnetworkResponse
参照があり、それ自体に「data」メンバーがあります。これは、応答本文のバイト配列です。応答のエラーコードの場合にデータを表示する場合は、次のようなものを使用できます。
@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...
}