Retrofit 2 возвращает ноль, когда HTTP равен 404 - PullRequest
0 голосов
/ 31 января 2020

У меня есть API, который работает хорошо. Я возвращаю некоторые http-коды из API, такие как 200, 404 и c.

Всякий раз, когда я получаю 404-й http-код из API, модернизация не дает мне ответ, который я отправил из API. В качестве примера я изменил код 404 на 200 из файла API, и мне показала модернизация. Когда код 404, модификация не дает мне тело ответа и возвращает ноль. Я также пытался использовать if(response.isSuccessful), но не работал.

Вот мой код модификации:

call.enqueue(new Callback<JsonElement>() {
        @Override
        public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {


                switch (response.code()){
                    case 404:
                        Gson gson = new Gson();
                        JsonElement successElement = response.body();
                        POJO_Response_Error_Message errorMessage;
                        errorMessage = gson.fromJson(successElement, POJO_Response_Error_Message.class);
                        Toast.makeText(MainActivity.this, "ERROR "+errorMessage.getMessage(), Toast.LENGTH_SHORT).show();
                        break;

                    case 200:
                        Toast.makeText(MainActivity.this, "200 success", Toast.LENGTH_SHORT).show();
                        // get response...
                        break;

            }
        }

        @Override
        public void onFailure(Call<JsonElement> call, Throwable t) {
            Log.d("error_log", "Retrofit error");
        }
    });

Ошибка:

POJO_Response_Error_Message.getMessage()' on a null object reference

РЕШЕНИЕ : Я нашел альтернативное решение. Мой пользовательский ответ был в сообщении об ошибке Retrofit.

 Gson gson = new Gson();
                   Type type = new TypeToken<POJO_Response_Error_Message>() {}.getType();
                   POJO_Response_Error_Message errorResponse = gson.fromJson(response.errorBody().charStream(),type);
                   Toast.makeText(MainActivity.this, "RESPONSE: "+errorResponse, Toast.LENGTH_SHORT).show();
...