У меня есть 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();