0

I am trying to get the HTTP status code like 400, 401, or 500 from server side. I tried the code below but the message was null.

new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("error fetched/////", "" + error.toString());
        // listener.onError(error.toString());
        String json = null;
        NetworkResponse response = error.networkResponse;
        int errcode = error.networkResponse.statusCode;

        Log.e("errcode","errcode"+error.networkResponse.toString());

        Log.e("HttpStatus", String.valueOf(errcode));

        if(HttpStatus.SC_SWITCHING_PROTOCOLS==error.networkResponse.statusCode){
            Log.e("HttpStatus","HttpStatus");
        }
        if (response != null && response.data != null) {
            switch (response.statusCode) {
                case 400:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listenerpost", "listenerpost" + error.getMessage());
                    break;

                case 401:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listener1", "listener" + error.networkResponse.toString());
                    break;

                case 500:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listener500", "listener500" + error.networkResponse.toString());
            }
            //Additional cases
        }
    }
})

Please help me to fix this issue.

Eric Galluzzo
  • 3,191
  • 1
  • 20
  • 20
karthik
  • 321
  • 1
  • 8
  • 21
  • what is the response you get from this: Log.e("errcode","errcode"+error.networkResponse.toString()); – kalin Apr 04 '16 at 11:05
  • errcode com.android.volley.NetworkResponse@1b5fef4b this is the response from that. @djodjo – karthik Apr 04 '16 at 11:18
  • can do a log of json after " json = new String(response.data); " and can u paste your trimMessage also as it seems the issue is there – kalin Apr 04 '16 at 11:26
  • also by "got message as null." you mean 'json' variable or something else ? – kalin Apr 04 '16 at 11:32
  • Log.e("listenerpost", "listenerpost" + error.getMessage()); here i got null message. – karthik Apr 04 '16 at 11:56
  • I have checked "json = new String(response.data)" here i have used wrong param for getting error message. Now working good using error_description param. Thanks @djodjo {"error":"invalid_grant","error_description":"Provided Authorization Grant is invalid."} – karthik Apr 04 '16 at 12:16
  • yep i added an answer before if this want you want you can accept it :) – kalin Apr 04 '16 at 12:29

2 Answers2

0

Override this method:

@Override
protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
      // Here is what you need!
      response.statuscode;
}
Laurel
  • 5,965
  • 14
  • 31
  • 57
Robert Banyai
  • 1,329
  • 12
  • 14
0

The issues is that you are trying to get

error.getMessage()

while this is null for the erros you are trying because BasicNetwork does:

else if (statusCode >= 400 && statusCode <= 499) {
                        // Don't retry other client errors.
                        throw new ClientError(networkResponse);
                    } else if (statusCode >= 500 && statusCode <= 599) {
                        if (request.shouldRetryServerErrors()) {
                            attemptRetryOnException("server",
                                    request, new ServerError(networkResponse));
                        } 

Basically error is just an Exception class and message for ClientError and ServerError is not set.

the error information from the server is in

error.networkResponse

and the way you get it should get the message from the server

json = new String(response.data);

kalin
  • 3,546
  • 2
  • 25
  • 31