#android #json #retrofit
#Android #json #доработка
Вопрос:
REST API, который я использую, возвращает JSON с данными, чтобы я мог их анализировать. Проблема в том, что если какое-то значение равно 0, API вообще не вернет такое поле. Мне нужно найти способ, как обнаружить это в коде.
JSON без поля данных:
current
dt 1611128505
sunrise 1611125437
sunset 1611156927
temp 2.88
etc
JSON с полем данных:
current
dt 1611128505
sunrise 1611125437
sunset 1611156927
temp 2.88
precip 1.5 <---here
etc
Как определить, существуют ли данные?
Call<RetrofitWeatherPOJO> call = apiInterface.doGetWeather(Lat, Lon, ApiKey, units);
call.enqueue(new Callback<RetrofitWeatherPOJO>() {
@Override
public void onResponse(Call<RetrofitWeatherPOJO> call, Response<RetrofitWeatherPOJO> response) {
RetrofitWeatherPOJO weatherPOJO = response.body();
double TempCurrent = weatherPOJO.current.temp;
double HumCurrent = weatherPOJO.current.humidity;
double PrercipCurrent = weatherPOJO.current.precipitation; <-- will crash if JSON missing data
мой gradle
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
Класс POJO
@SerializedName("precipitation")
@Expose
public Double precipitation;
Ответ №1:
вы можете использовать простой try catch для обработки исключения и предотвращения сбоев, но лучшим способом было бы использовать простую ifкоманду if, чтобы проверить, является ли json нулевым или нет, например
if (weatherPOJO.current.precipitation != null) {
//do your thing
}
Комментарии:
1. Да, это оно, я думал, что уже попробовал это .. спасибо, чувак
2. ваше приветствие, если это помогло вам, не могли бы вы принять ответ 🙂
Ответ №2:
В идеале это не приведет к сбою, если вы используете gson
для сериализации, он будет игнорировать null
значения или отсутствующие поля, следовательно, поле / параметр precipitation
должен иметь значение по умолчанию.
Комментарии:
1. спасибо, я добавил свой gradle к исходному вопросу, как проверить указанное вами значение по умолчанию? Спасибо