Волейбол не обрабатывает 404 ответа

Волейбол возвращает ошибку, когда ответ 404 возвращается с сервера, даже если этот ответ 404 содержит коды ошибок на основе json. Он не анализирует ответ 404, содержащий jason {code: resourceNotFound, msg: message_index}

В любом случае, чтобы заставить Volley обрабатывать JSon в сообщении 404? Служба, с которой я интегрирую, возвращает 404, когда ресурс не найден.

Ответ 1

Если вы получите ответ 404, он должен попасть в какой-либо прослушиватель ошибок, который вы установили. Вы получаете объект VolleyError в прослушивателе ошибок. Вы можете получить ответ сети от этого объекта, а затем данные из тела ответа. Он задается как массив char, поэтому вам нужно самому преобразовать его в нечто другое.

Ниже приведенный ниже фрагмент - это простой запрос, который вам нужен, вам нужно будет добавить свой собственный 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){

            }
        }
    }
    );

Ответ 2

Я отправляю это с тех пор, я положил свой один день на это и не хочу, чтобы кто-то боролся с тем же.

ANS: Если кто-то хочет добавить Body/Headers к вызову POST, добавьте код ниже

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

Если пользователь является объектом, вы можете перейти к телу.

Счастливое кодирование:)