问题:
使用Volley执行DELETE
请求后,下一个请求将始终转到onErrorResponse
块(绕过parseNetworkResponse
)。之后,所有请求都正常工作,直到我再次执行DELETE
请求。 下一个请求不起作用。如果我再次尝试相同的请求,它将起作用。
描述:
我正在使用JsonObjectRequest
来启动所有API。对于DELETE
请求,响应正文为null
。因此,JsonObjectRequest
无法处理它并导致Parse错误。因此,我实施了parseNetworkResponse
来明确检查null
正文。现在,DELETE
请求有效。
这是我的代码,
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
//Allow null
if (jsonString == null || jsonString.length() == 0) {
jsonString = "{'status':'success'}";
}
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));
}
}
上面的代码段允许JsonObjectRequest
处理null正文。现在,DELETE
请求正常工作。
但是,只要我发出
DELETE
请求,就会停止下一个请求 工作即可。它直接转到onErrorResponse
和parseNetworkResponse
未被调用。
示例:
它会抛出错误,
com.android.volley.NoConnectionError: java.net.ProtocolException: Unexpected status line: <link rel='stylesheet' type='text/css' property='stylesheet' href='//MY_DOMAIN_NAME/_debugbar/assets/stylesheets?v=1484813989'><script type='text/javascript' src='//MY_DOMAIN_NAME/_debugbar/assets/javascript?v=1483605979'></script><script type="text/javascript">jQuery.noConflict(true);</script>
我还尝试为所有请求禁用缓存。我甚至尝试附加随机数作为参数,以确保url始终是唯一的。它仍然没有用。
修改
进一步的调试表明,parseNetworkError
被调用。 Apache登录后端表明有时这个错误的请求到达服务器并且服务器返回了正确的响应,尽管它没有转到parseNetworkResponse
并显示错误。
大多数时候,请求根本无法到达服务器。
这听起来很奇怪。任何帮助将不胜感激。如果您需要更多信息,请与我们联系。