1
votes

Volley HttpHeaderParser.parseDateAsEpoch: impossible d'analyser dateStr: -1, retour à 0

J'ai cette erreur lors de l'utilisation de volley

HttpHeaderParser.parseDateAsEpoch: Impossible d'analyser dateStr: -1, retour à 0

java.text.ParseException: Date non analysable: "-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) sur com.android.volley.NetworkDispatcher.run (NetworkDispatcher.java:90)

Tout fonctionne bien mais je vois cette erreur dans les journaux pour chaque demande. Qu'est-ce que c'est et comment puis-je résoudre l'erreur?

J'ai essayé de nombreuses façons et il y a une erreur dans toutes. Par exemple:

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)


2 commentaires

pouvez-vous résoudre votre problème?


Sous Android ... Non, mais je peux résoudre ce problème à partir du serveur en changeant les en-têtes @ Ak23


3 Réponses :


3
votes

il vient d'expiré essayez de le remplacer:

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

      }


0 commentaires

1
votes

La solution simple est simplement d'ignorer ce journal car il a été spammé en raison de l'expiration de la réponse d'en-tête du serveur

pour en savoir plus, consultez les liens ci-dessous

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

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


0 commentaires

0
votes

Une autre solution consisterait à remplacer la chaîne dans l'en-tête Treemap de la réponse:

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;
}

Ceci formate la date habituelle de

MAR 11 FÉVRIER 11:28:17 2020

à

MAR, 11 FÉV 2020 11:28:17 GMT

Puisque l'expression régulière en Java est une mauvaise solution générale et que l'erreur Volley n'arrête pas vraiment le tâche, je suggérerais d'exécuter ce code uniquement dans votre mode de débogage personnel.


0 commentaires