Разбор / десериализация и сохранение вложенного JSON в SQLite, а затем извлечение его - PullRequest
0 голосов
/ 07 ноября 2019

Я проанализировал вложенный JSON с GSON (вероятно, неправильно, так как это мой первый раз). Сейчас я пытаюсь вставить его в SQLite. Не могу найти то, что нужно написать дальше. Когда я пишу цикл for для вставки, я получаю ошибку cannot find symbol class Country. Не удалось найти соответствующее руководство в Интернете, поэтому я надеюсь, что кто-нибудь может помочь в продвижении вперед.

Вот здесь и начинается проблема:

Country[] countriesArray = gson.fromJson(jsonString, Country[].class);
for (int i = 0; i < countriesArray.length(); i++) {
...
            }

countriesArray.length() помечена как ошибка: не можетнайти класс символов Country.

Один объект из JSON:

[ 
   { 
      "name":"Afghanistan",
      "topLevelDomain":[ 
         ".af"
      ],
      "callingCodes":[ 
         "93"
      ],
      "capital":"Kabul",
      "region":"Asia",
      "subregion":"Southern Asia",
      "population":27657145,
      "latlng":[ 
         33.0,
         65.0
      ],
      "demonym":"Afghan",
      "area":652230.0,
      "gini":27.8,
      "timezones":[ 
         "UTC+04:30"
      ],
      "nativeName":"افغانستان",
      "numericCode":"004",
      "currencies":[ 
         { 
            "name":"Afghan afghani",
            "symbol":"؋"
         }
      ],
      "languages":[ 
         { 
            "name":"Pashto",
            "nativeName":"پښتو"
         },
         { 
            "name":"Uzbek",
            "nativeName":"Oʻzbek"
         },
         { 
            "name":"Turkmen",
            "nativeName":"Türkmen"
         }
      ],
      "translations":{ 
         "de":"Afghanistan",
      },
      "flag":"https://restcountries.eu/data/afg.svg",
      "cioc":"AFG"
   },

Классы моделей, которые я написал, предназначены только для переменных объектов и массивов, которые мне нужны.

Класс модели Country.Java

public class Country implements Parcelable {

    private String name;
    private String capital;
    private String region;
    private String subregion;
    private int population;
    private List<Double> latlng = new ArrayList<Double>();
    private double area;
    private double gini;
    private List<String> timezones = new ArrayList<String>();
    private List<Currency> currencies = new ArrayList<Currency>();
    private List<Language> languages = new ArrayList<Language>();
    private String flag;

    public Country() {}

//getters, setters, toString() and Parcelable methods
}

Класс модели Currency.Java

public class Currency implements Parcelable {

    private String name;
    private String symbol;

//getters, setters, toString() and Parcelable methods
}

Модель класса Language.Java

public class Language implements Parcelable {

    private String name;
    private String nativeName;

//getters, setters, toString() and Parcelable methods
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Используйте Gson TypeToken для установки типа возвращаемого объекта во время JSON parse

List<Country> countries  = gson.fromJson(jsonString, new TypeToken<List<Country>>(){}.getType());

for(Country country : countries) {
    //Do your DB operation here
}
0 голосов
/ 07 ноября 2019

Создайте typeToken и передайте его методу fromJson, как показано ниже

Type listType = new TypeToken<List<Country>>(){}.getType();
List<Country> countryList = gson.fromJson(jsonArray.toString(), listType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...