2

使用 volley 时出现此错误

HttpHeaderParser.parseDateAsEpoch:无法解析 dateStr:-1,回退到 0

java.text.ParseException:无法解析的日期:com.android.volley.toolbox.HttpHeaderParser.parseDateAsEpoch(HttpHeaderParser.java:135) 处的 java.text.DateFormat.parse(DateFormat.java:362) 处的“-1”。 android.volley.toolbox.HttpHeaderParser.parseCacheHeaders(HttpHeaderParser.java:97) 在 com.android.volley.toolbox.JsonObjectRequest.parseNetworkResponse(JsonObjectRequest.java:86) 在 com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java: 143) 在 com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111) 在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

一切正常,但我在每个请求的日志中都看到了这个错误。这是什么,我该如何解决这个错误?

我尝试了很多方法,所有方法都有错误。例如 :

val url = "http://...."

val params = HashMap<String, String>()
params["parameter"] = "value"

val parameters = JSONObject(params)

val request = JsonObjectRequest(Request.Method.POST, url, parameters,
    Response.Listener<JSONObject> { response ->
        Log.d("result", response .toString())
    },
    Response.ErrorListener { error ->
        Log.e("result", error.toString())
    })

VolleyService.requestQueue.add(request)
4

3 回答 3

3

它来的形式过期尝试替换它:

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
     // Map<String, String> responseHeaders = response.headers;
      try {
        loading.dismiss();
        String expire =response.headers.get("expires");
        String date=response.headers.get("Date");
        if(expire.length()<3){
          response.headers.put("expires",date);
        }

      } catch (Exception e) {

      }
于 2019-08-01T20:45:50.427 回答
2

简单的解决方案就是忽略此日志,因为它是由于来自服务器的过期标头响应而发送的垃圾邮件

有关更多信息,请查看以下链接

https://github.com/google/volley/issues/223

https://github.com/google/volley/issues/282

于 2019-12-05T14:26:12.100 回答
0

另一种解决方案是替换响应中标题 Treemap 中的字符串:

protected Response<String> parseNetworkResponse(NetworkResponse response) {
    String parsed;
    try {
        if(charset != null) {
            parsed = new String(response.data, charset);
        } else {
            parsed = new String(response.data, 
HttpHeaderParser.parseCharset(response.headers));
        }
    } catch (UnsupportedEncodingException e) {
        parsed = new String(response.data);
    }
    String regexedStr = regexed(response.headers.get("Date"));
    response.headers.put("Date",regexedStr);
    return Response.success(parsed, 
HttpHeaderParser.parseCacheHeaders(response));
}

public String regexed(String str){

    String LV= "([a-zA-Z]{1,3}) ([a-zA-Z]{1,3}) (\\d\\d) (\\d\\d:\\d\\d:\\d\\d) (\\d\\d\\d\\d)";
    str = str.replaceAll(LV,"$1, $3 $2 $5 $4 GMT");

    return str;
}

这格式化通常的日期

2020 年 2 月 11 日星期二 11:28:17

格林威治标准时间 2020 年 2 月 11 日星期二 11:28:17

由于 java 中的正则表达式是一般的错误解决方案,并且 Volley 错误并没有真正停止任务,我建议仅在您的个人调试模式下运行此代码。

于 2020-02-11T12:37:23.133 回答