如果最后一个响应正文为空,则不会调用Volley parseNetworkResponse

时间:2017-02-08 05:13:58

标签: android android-volley

问题:

使用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未被调用。

示例:

  • 解雇了多个POST,GET组合。都好。
  • 发送DELETE请求。成功完成
  • 解雇了一个POST或GET请求。直接转到onErrorResponse(绕过parseNetworkResponse)。
  • 再次尝试相同的请求,它有效。
  • 一切正常,直到我再次激活DELETE请求。一旦我解除DELETE请求,那么下一个请求只能起作用。

它会抛出错误,

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并显示错误。 大多数时候,请求根本无法到达服务器。

这听起来很奇怪。任何帮助将不胜感激。如果您需要更多信息,请与我们联系。

0 个答案:

没有答案