【问题标题】:Volley HttpHeaderParser.parseDateAsEpoch: Unable to parse dateStr: -1, falling back to 0Volley HttpHeaderParser.parseDateAsEpoch:无法解析 dateStr:-1,回退到 0
【发布时间】:2019-06-11 20:46:44
【问题描述】:

我在使用 volley 时遇到这个错误

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

java.text.ParseException:无法解析的日期:“-1” 在 java.text.DateFormat.parse(DateFormat.java:362) 在 com.android.volley.toolbox.HttpHeaderParser.parseDateAsEpoch(HttpHeaderParser.java:135) 在 com.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)

【问题讨论】:

  • 你能解决你的问题吗?
  • 在 android ... 不。但我可以通过更改标头 @Ak23 从服务器解决这个问题

标签: android networking android-volley


【解决方案1】:

它来自form expires尝试替换它:

    @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) {

      }

【讨论】:

    【解决方案2】:

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

    更多请查看以下链接

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

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

    【讨论】:

      【解决方案3】:

      另一种解决方案是替换响应中标题 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 错误并没有真正停止任务,我建议仅在您的个人调试模式下运行此代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多