将对象数组写入和读取为parcelable

时间:2013-12-09 12:30:26

标签: android arrays json gson parcelable

我有一个用Gson解析的JSON文件。我遇到的问题是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:

public class JsonAssets implements Parcelable{

    String Address;
    String Title;
    String AudioFile;
    Categories[] categories;


private class Categories{

    String CategoryName;
    String Description;
    String ExternalLink;
    String File;
    String FileName;
    int CategoryID;
    int ParentCategoryID;
    int Id;
    String Image;
}

 }

该类传递如下:

JsonReader reader = new JsonReader(new InputStreamReader(is, "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;
        }

所以我读取和写入地址,音频文件如下:

  public static final Parcelable.Creator<AssetJson> CREATOR = new Parcelable.Creator<AssetJson>() {
        public AssetJson createFromParcel(Parcel in) {
            return new AssetJson(in);
        }

        public AssetJson[] newArray(int size) {
            return new AssetJson[size];
  }
    };

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();
}

我遇到的问题是我不知道如何读取和写入包裹的类别[]。事实上,它是一个对象数组让我难过。

这是我对parcelables的第一次体验,我正试图接管别人的代码。因此,如果有人能解释我将如何包裹对象数组,我将非常感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

简单,首先让你的Category类实现Parcelable,实现所有读写逻辑,然后使用Parcel类writeParcelableArray方法编写一个parcelables数组。

希望得到这个帮助。

答案 1 :(得分:0)

我设法找到了正确的解决方案(对我来说),所以如果有其他人反对这一点,请点击此链接: http://www.javacreed.com/gson-deserialiser-example/

它显示了如何解析嵌套数组和反序列化。