Я просмотрел форум и столкнулся с каким-то подобным вопросом, но ни одна из них не оказала никакой помощи.
Поэтому я занимаюсь тем, где кто-то еще остановился, и это проблема. Код, над которым я работаю, использует gson для синтаксического анализа потока json, и это прекрасно и понятно, затем соответствующие данные затем добавляются к посылке. Как ниже
public class JsonAssets{
String Address;
String Title;
String File;
Category [] Categories;
public void writeToParcel(Parcel paramParcel, int paramInt) {
paramParcel.writeString(Address);
paramParcel.writeString(Title);
paramParcel.writeString(AudioFile);
}
private JsonAsset(Parcel in) {
Address = in.readString();
Title = in.readString();
AudioFile = in.readString();
}
public ContentValues getContentValues(){
ContentValues contentValue = new ContentValues();
contentValue.put("ID", this.Id);
contentValue.put("Title", this.Title);
contentValue.put("address", this.Address);
}
РЕДАКТИРОВАТЬ
private class Category{
String CategoryName;
String Description;
String ExternalLink;
String File;
String FileName;
int CategoryID;
int ParentCategoryID;
int Id;
int Image;
public int getCategoryID(){
return this.Id;
}
}
Затем база данных обновляется с помощью этих contentValues.
JSON выглядит примерно так:
"assets":[
{
"Address":"Crator1, The Moon",
"Title":"The Moon",
"AudioFile":null,
"Categories":[
{
"CategoryName":"Restaurants",
"Description":"blah blah",
"ExternalLink":"",
"File":"",
"FileName":"0",
"CategoryID":0,
"ParentCategoryID":786,
"Id":334,
"Image":"",
},
Я знаю, что JSON недействителен, я только что отредактировал. Проблема в том, что у меня есть категории, вложенный массив, и я не знаю, как обращаться с этим массивом. Все, что я хочу получить, это "Id" в массиве "Категории".
Я не могу создать для него отдельный объект из-за того, как передается класс:
JsonReader reader = новый JsonReader (новый InputStreamReader (есть, "UTF-8"));
reader.beginObject();
reader.nextName();
reader.beginArray();
JsonObject obj = null;
while (reader.hasNext()) {
try{
switch(type){
case ASSET_UPDATE:
obj = gson.fromJson(reader, JsonAsset.class);
break;
}
Поэтому, если бы кто-нибудь мог сказать мне, как с этим справиться, я бы очень признателен. Если я не очень ясно извиняюсь перед моим вопросом, просто спросите, и я уточню... спасибо заранее
Поэтому мне удалось правильно ответить на мой вопрос после нескольких часов и часов душераздирающих исследований.
Если у кого-то есть такая же проблема, просто следуйте по этой ссылке:
http://www.javacreed.com/gson-deserialiser-example/
Он позаботился о 1: правильно разобрал вложенный массив, и он также отменил его для меня.
1) Объявите свой объект как класс, который у вас действительно есть (JsonAsset)
JsonAsset obj = gson.fromJson(reader, JsonAsset.class);
2) Изменить класс для соответствия строке Json
public class JsonAssets{
String Address;
String Title;
String AudioFile;
Category[] Categories;
}
private class Category{
String CategoryName;
...
}
fromJson вернет полный инициализированный объект с вложенным массивом