【问题标题】:Write and Read an object array to parcelable将对象数组写入和读取到 parcelable
【发布时间】:2013-12-09 12:30:25
【问题描述】:

我有一个使用 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();
}

我的问题是我不知道如何在包裹中读取和写入 Categories[]。它是一个对象数组的事实让我很难过。

这是我第一次使用 Parcelables,我正在尝试接管其他人的代码。因此,如果有人能解释我将如何打包一个对象数组,我将不胜感激。

谢谢!

【问题讨论】:

  • 通过这个link
  • @ImtiyazKhalani 我这样做的问题与我对 Techfist 的回复相同。所以我不确定下一步该去哪里

标签: android arrays json gson parcelable


【解决方案1】:

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

希望对您有所帮助。

【讨论】:

  • 嗨,谢谢你回来找我,这种方法的问题是我已经在assetJson 类中实现了parcelable,我已经编辑了我的问题来显示这个。所以方法 public static final Parcelable.Creator CREATOR = new Parcelable.Creator()。无法复制,因为我收到错误“变量创建者已被定义”。我试过这条路线,所以我不知道该怎么做。我想用assetJson 内容打包对象数组。
  • 那么您的意思是实现一个与assetJson 类分开的Category 类吗?不是子类?
  • 是的,确实如此,否则您将无法将其写入包裹中。
【解决方案2】:

我设法(对我而言)找到了正确的解决方案,所以如果其他人对此提出异议,请点击此链接: http://www.javacreed.com/gson-deserialiser-example/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2021-08-11
    • 1970-01-01
    • 2015-07-07
    • 2019-07-21
    相关资源
    最近更新 更多