2013-08-20 11 views
10

Volley restituisce un errore quando viene restituita una risposta 404 dal server anche se tale risposta 404 contiene codici di errore basati su json. Non analizza la risposta 404 che contiene jason {code: resourceNotFound, msg: message_index}Volley Not Parsing 404 response

Esiste comunque la possibilità che Volley elabori il JSon in un messaggio 404? Il servizio che sto integrando restituisce un 404 quando non è possibile trovare una risorsa.

risposta

34

Se si ottiene una risposta 404, dovrebbe entrare in qualsiasi ascoltatore di errori impostato. Ottieni un oggetto VolleyError nel listener di errori. È possibile ottenere la risposta di rete da questo oggetto e quindi i dati dal corpo della risposta. Viene fornito come un array di caratteri, quindi è necessario convertirlo in qualcos'altro.

Lo snippet di seguito è una semplice richiesta che lo fa, tuttavia dovrai inserire il tuo 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

Sto postando questo da allora, ho messo il mio un giorno su questo e non voglio che nessuno faccia lo stesso.

ANS: Se qualcuno vuole aggiungere il corpo/intestazioni per la chiamata POST quindi aggiungere il codice qui sotto

@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(); 
       } 

dove utente è l'oggetto che si può passare al corpo.

Happy Coding :)

Problemi correlati