2013-08-20 1 views
10

Volley renvoie une erreur lorsqu'une réponse 404 est renvoyée par le serveur même si cette réponse 404 contient des codes d'erreur basés sur json. Il n'analyse pas la réponse 404 qui contient jason {code: resourceNotFound, msg: message_index}Volley Not Parsing Réponse 404

Y at-il de toute façon que Volley traite le JSon dans un message 404? Le service auquel j'intègre renvoie un 404 lorsqu'une ressource est introuvable.

Répondre

34

Si vous obtenez une réponse 404, elle devrait entrer dans l'écouteur d'erreur que vous avez défini. Vous obtenez un objet VolleyError dans l'écouteur d'erreur. Vous pouvez obtenir la réponse du réseau à partir de cet objet, puis les données du corps de la réponse. Il est donné sous la forme d'un tableau de caractères, donc vous devez le convertir vous-même en quelque chose d'autre.

L'extrait ci-dessous est une simple requête qui fait cela, vous devrez cependant entrer votre propre URL.

StringRequest request = new StringRequest(Request.Method.GET, "yourURL", new Response.Listener<String>() { 
     @Override 
     public void onResponse(String s) { 
      //Do whatever 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      try { 
       String responseBody = new String(volleyError.networkResponse.data, "utf-8"); 
       JSONObject jsonObject = new JSONObject(responseBody); 
      } catch (JSONException e) { 
       //Handle a malformed json response 
      } catch (UnsupportedEncodingException error){ 

      } 
     } 
    } 
    ); 
1

Je poste ceci depuis, je mets mon un jour sur ceci et je ne veux pas que n'importe qui lutte le même.

ANS: Si quelqu'un veut ajouter le corps/en-têtes à l'appel POST puis ajoutez le code ci-dessous

@Override 
       public HashMap<String, String> getHeaders() throws AuthFailureError { 
        HashMap<String, String> params = new HashMap<>(); 
        params.put("apikey", Constants.apiKey); 
        params.put("env", Constants.enviroment); 
        params.put("Content-Type", "application/json"); 
        return params; 
       } 

       @Override 
       public byte[] getBody() throws AuthFailureError { 
        return gson.toJson(user).getBytes(); 
       } 

où l'utilisateur est l'objet que vous pouvez passer à l'organisme.

Happy Coding :)