Андроид приложение выполняет запрос в базу данных и получает ответ в JSON
, ответ приходит в виде вложенных массивов(строки БД). И вот этих ответов может быть один, может пять. Как обработать эти разные варианты ?? С самого начала задача стояла, что ответов БД будет пять, я спокойно получал JSON
на пять объектов и в JSON
и десериализовал это в пять классов, из которых затем получал нужные данные. Затем задача расширилась, подключили еще одну БД и вот она по запросу может выдать разное количество объектов, и если их менее пяти - приложение падает. Ошибка:
NullPointerException: Attempt to invoke virtual method on a null object reference.
Я понимаю почему это происходит - объекта-то нет. И вот вопрос - как десериализовать JSON непостоянной длины ? Пробовал аннотации связанные с Null, не помогло либо я не понял как надо.
вот JSON
{
"0": {"Comp_name":"161012","Comp_text":"Отзывная компания. ","Comp_Url":null},
"1": {"Comp_name":"161012","Comp_text":"Сервисная компания. ","Comp_Url":null},
"2": {"Comp_name":"free","Comp_text":"Сервисные компании для Quoris","Comp_Url":null},
"3": {"Comp_name":"free","Comp_text":"Сервисные компании для Quoris","Comp_Url":null}
}
так обработали JSON
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
ExampleDB example1 = gson.fromJson(answerHTTP, ExampleDB.class);
Модель для парсинга
public class ExampleDB {
@SerializedName("0")
@Expose
private com.example.summa_post._0 _0;
@SerializedName("1")
@Expose
private com.example.summa_post._1 _1;
@SerializedName("2")
@Expose
private com.example.summa_post._2 _2;
@SerializedName("3")
@Expose
private com.example.summa_post._3 _3;
@SerializedName("4")
@Expose
private com.example.summa_post._4 _4;
public com.example.summa_post._0 get0() {
return _0;
}
public void set0(com.example.summa_post._0 _0) {
this._0 = _0;
}
public com.example.summa_post._1 get1() {
return _1;
}
public void set1(com.example.summa_post._1 _1) {
this._1 = _1;
}
public com.example.summa_post._2 get2() {
return _2;
}
public void set2(com.example.summa_post._2 _2) {
this._2 = _2;
}
public com.example.summa_post._3 get3() {
return _3;
}
public void set3(com.example.summa_post._3 _3) {
this._3 = _3;
}
public com.example.summa_post._4 get4() {
return _4;
}
public void set4(com.example.summa_post._4 _4) {
this._4 = _4;
}
Ответ нашелся. Можно не обращать внимание на то, что будет записано в классы после десериализации. При вызове метода из этого класса достаточно сделать исключение на Null.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
WebView не может выгрузить ссылку с meta refreshОткрывает окно "Не удалось найти страницу"
Пытаюсь изучить api в springGET Запрос хорошо посылается, а вот POST пока сложно