Volley Not Parsing 404 response
Asked Answered
N

2

15

Volley returns an error when a 404 response is returned from the server even if that 404 response contains json based error codes. It does not parse the 404 response which contains jason { code: resourceNotFound, msg:message_index }

Is there anyway to get Volley to process the JSon in a 404 message? The service I am integrating with returns a 404 when a resource cannot be found.

Neff answered 20/8, 2013 at 21:21 Comment(0)
G
39

If you get a 404 response it should get into whatever error listener you set. You get a VolleyError object in the error listener. You can get the network response from this object and then the data from the response body. It's given as a char array so you need to convert it to something else yourself.

The snippet below is a simple request that does that, you'll need to put in your own URL though.

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

            }
        }
    }
    );
Gentes answered 21/8, 2013 at 11:33 Comment(0)
C
2

If someone want to add the Body/Headers to the POST call then add the code below

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

Where user is the Object you can pass to the Body.

Celsacelsius answered 31/7, 2015 at 12:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.