401 状态代码可能带有空白响应数据,如果您检查此volley code 第 63-75 行
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
如果 jsonString 为空,它仍会尝试从它创建一个 JSONObject new JSONObject(jsonString),这会引发 JSONException
您可以下载 volley 源代码,将其作为模块导入到您的 android studio 项目中,添加它的依赖项并进行此更正:
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
// Fix for an error on blank success response
// return Response.success(new JSONObject(jsonString),
// HttpHeaderParser.parseCacheHeaders(response));
if (!jsonString.trim().contentEquals("")) {
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
}
else {
return Response.success(new JSONObject(),
HttpHeaderParser.parseCacheHeaders(response));
}
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
}
要将 Volley 添加到您的项目中 - 克隆 Volley 存储库并将其设置为库项目
-
通过在命令行中键入以下内容来克隆存储库:
git clone https://android.googlesource.com/platform/frameworks/volley
将下载的源代码作为Create an Android Library 中所述的Android 库模块导入您的应用项目。
如果您不想在导入的库中进行修复,也可以尝试Prase 401 volley error message: