Android Parcelable类中的json对象到数组列表

ego6inou  于 2023-03-24  发布在  Android
关注(0)|答案(1)|浏览(118)

我不知道这个标题是不是很准确,但是让我解释一下我想要的。(遗憾的是,它不是一个数组,我不能循环遍历它),其中包含许多其他具有类似元素的JSONObject(id,name,icon),当我读取一个元素时,它将其值写入一个单独的类中,并实现了Parcelable。下面是我的Parcelable类的样子,在我进一步解释之前:

public class ItemsInfo implements Parcelable {

    public int itemId;
    public String itemName, itemIcon;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(itemName);
        dest.writeString(itemIcon);
        dest.writeInt(itemId);
    }

    public static final Parcelable.Creator<ItemsInfo > CREATOR = new Parcelable.Creator<ItemsInfo >() {

        @Override
        public ItemsInfo createFromParcel(Parcel source) {
            ItemsInfo ei = new ItemsInfo();
            ei.itemName = source.readString();
            ei.itemIcon = source.readString();
            ei.itemId = source.readInt();
            return ei;
        }

        @Override
        public ItemsInfo [] newArray(int size) {
            return new ItemsInfo [size];
        }
    };
}

我想要的是,每次它读取一个具有类似元素的JSONObject时,都将它们写入String itemName中的ArrayList,这样以后我就可以通过索引或其他东西访问给定的项目,而不必为每个不同的项目创建单独的字符串和整数,如itemName1,itemName2,itemName3.....这可能吗?

zkure5ic

zkure5ic1#

您可以使用我的droidQuery库来简化JSON解析。要将JSONObject转换为 Key-Value Map,您可以使用以下命令:

List<String> items = new ArrayList<String>();//this will contain your JSONObject strings
Map<String, ?> data = null;
try {
    JSONObject json;//this references your JSONObject
    data = $.map(json);
    
} catch (Throwable t) {
    Log.e("JSON", "Malformed JSON Object");
}

然后,要遍历每个元素,只需执行以下操作:

if (data != null) {
    for (Map.Entry<String, ?> entry : data.entrySet()) {
        items.add(entry.value().toString());
    }
}

现在你的Listitems 已经填充了JSONObejct s的String表示。稍后,如果你想解析这个JSON,只需执行以下操作:

int index = 2;//the index of the JSONObject you want
try {
    Map<String, ?> data = $.map(new JSONObject(items.get(2)));
    //now iterate the map
} catch (Throwable t) {
    t.printStackTrace();//something wrong with your JSON string
}

相关问题