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 cont
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){
}
}
}
);
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.