Java 安卓包裹列表<;字符串[]>;

Java 安卓包裹列表<;字符串[]>;,java,android,json,parcelable,Java,Android,Json,Parcelable,我有一个JSON,我想把它放到parcelable类中,这样我就可以将它的对象从一个活动传递到另一个活动。我以前用过好几次包裹。但这一次,我对如何使用下面的JSON响应创建parcelable类感到困惑 实际上,混淆的是Listarraylist ofString[]我如何传递它 [ { puzzle_title: "Puzzle", grid_size: "8", data: [ [ "J", "J", "P", "Y",

我有一个JSON,我想把它放到parcelable类中,这样我就可以将它的对象从一个活动传递到另一个活动。我以前用过好几次包裹。但这一次,我对如何使用下面的JSON响应创建parcelable类感到困惑

实际上,混淆的是
List
arraylist of
String[]
我如何传递它

[
    {
    puzzle_title: "Puzzle",
    grid_size: "8",
    data: [
    [
    "J",
    "J",
    "P",
    "Y",
    "B",
    "T",
    "P",
    "U"
    ],
    [
    "L",
    "W",
    "B",
    "I",
    "Q",
    "M",
    "S",
    "L"
    ],
    [
    "K",
    "Y",
    "Q",
    "L",
    "N",
    "A",
    "W",
    "D"
    ],
    [
    "Y",
    "E",
    "I",
    "G",
    "U",
    "G",
    "H",
    "V"
    ],
    [
    "B",
    "L",
    "A",
    "C",
    "K",
    "E",
    "I",
    "F"
    ],
    [
    "X",
    "L",
    "Q",
    "T",
    "B",
    "N",
    "T",
    "B"
    ],
    [
    "O",
    "O",
    "R",
    "E",
    "D",
    "T",
    "E",
    "W"
    ],
    [
    "H",
    "W",
    "B",
    "K",
    "H",
    "A",
    "F",
    "V"
    ]
    ],
    words: [
    "RED",
    "YELLOW",
    "BLUE",
    "BLACK",
    "WHITE",
    "MAGENTA"
    ]
    },
    {}
    ]
我已经把我的包裹课写在下面了

    public class PuzzelSetter implements Parcelable {

    @SerializedName("puzzle_title")
    private String title;
    @SerializedName("grid_size")
    private int size;
    private List<String[]> data = new ArrayList<String[]>();
    private List<String> words = new ArrayList<String>();

    public String getTitle() {
        return title;
    }

    public List<String[]> getData() {
        return data;
    }

    public void setData(List<String[]> data) {
        this.data = data;
    }

    public List<String> getWords() {
        return words;
    }

    public void setWords(List<String> words) {
        this.words = words;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void setData(ArrayList<String[]> data) {
        this.data = data;
    }

    public void setWords(ArrayList<String> words) {
        this.words = words;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(title);
        dest.writeInt(size);
        dest.writeList(data);
        dest.writeStringList(words);
    }

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

        @Override
        public PuzzelSetter createFromParcel(Parcel source) {
            return new PuzzelSetter(source);
        }

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

    public PuzzelSetter(Parcel parcel) {
        title = parcel.readString();
        size = parcel.readInt();
        //data = parcel.readStringArray(val);
        parcel.readStringList(words);
    }

}
公共类PuzzelSetter实现可包裹{
@序列化名称(“拼图标题”)
私有字符串标题;
@SerializedName(“网格大小”)
私有整数大小;
私有列表数据=新的ArrayList();
private List words=new ArrayList();
公共字符串getTitle(){
返回标题;
}
公共列表getData(){
返回数据;
}
公共无效设置数据(列表数据){
这个数据=数据;
}
公共列表getWords(){
返回单词;
}
公共无效设置字(列出字){
这个单词=单词;
}
公共无效集合标题(字符串标题){
this.title=标题;
}
公共int getSize(){
返回大小;
}
公共无效设置大小(整型大小){
这个。大小=大小;
}
公共void setData(ArrayList数据){
这个数据=数据;
}
公共无效设置字(ArrayList字){
这个单词=单词;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的书面记录(标题);
目的写入(大小);
目的写入列表(数据);
目的地记录列表(文字);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共PuzzelSetter createFromParcel(地块源){
返回新的PuzzelSetter(来源);
}
@凌驾
公共PuzzelSetter[]新数组(整数大小){
返回新的PuzzelSetter[尺寸];
}
};
公共PuzzelSetter(包裹){
title=parcel.readString();
大小=parcel.readInt();
//数据=parcel.readStringArray(val);
包裹阅读列表(文字);
}
}
更新:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(title);
    dest.writeInt(size);        
    dest.writeStringList(words);
    dest.writeInt(data.size()); // write list size
    for (String[] letters : data) { 
        dest.writeStringArray(letters); //write each element
    }
}

public PuzzelSetter(Parcel parcel) {
    title = parcel.readString();
    size = parcel.readInt();        
    //List<String[]> data = new ArrayList<String[]>();
    int size = parcel.readInt(); // read size
    for (int i = 0; i < size; i++) {
        String[] letters = parcel.createStringArray(); // read each element
        data.add(letters);
    }
    parcel.readStringList(words);
}
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
目的书面记录(标题);
目的写入(大小);
目的地记录列表(文字);
dest.writeInt(data.size());//写入列表大小
对于(字符串[]个字母:数据){
dest.writeStringArray(字母);//写入每个元素
}
}
公共PuzzelSetter(包裹){
title=parcel.readString();
大小=parcel.readInt();
//列表数据=新的ArrayList();
int size=parcel.readInt();//读取大小
对于(int i=0;i
欢迎提出任何建议


提前谢谢

您可以将所有列表元素分别写入地块:

dest.writeInt(data.size()); // write list size
for (String[] letters : data) { 
    dest.writeStringArray(letters); //write each element
}
以及如何阅读:

List<String[]> data = new ArrayList<String[]>();
int size = parcel.readInt(); // read size
for (int i = 0; i < size; i++) {
    String[] letters = parcel.createStringArray(); // read each element
    data.add(letters);
}
List data=new ArrayList();
int size=parcel.readInt();//读取大小
对于(int i=0;i
UPD:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(title);
    dest.writeInt(size);        
    dest.writeStringList(words);
    dest.writeInt(data.size()); // write list size
    for (String[] letters : data) { 
        dest.writeStringArray(letters); //write each element
    }
}

public PuzzelSetter(Parcel parcel) {
    title = parcel.readString();
    size = parcel.readInt();        
    //List<String[]> data = new ArrayList<String[]>();
    int size = parcel.readInt(); // read size
    for (int i = 0; i < size; i++) {
        String[] letters = parcel.createStringArray(); // read each element
        data.add(letters);
    }
    parcel.readStringList(words);
}
就你而言:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(title);
    dest.writeInt(size);        
    dest.writeStringList(words);
    dest.writeInt(data.size()); // write list size
    for (String[] letters : data) { 
        dest.writeStringArray(letters); //write each element
    }
}

public PuzzelSetter(Parcel parcel) {
    title = parcel.readString();
    size = parcel.readInt();        
    parcel.readStringList(words);
    int size = parcel.readInt(); // read size
    for (int i = 0; i < size; i++) {
        String[] letters = parcel.createStringArray(); // read each element
        data.add(letters);
    }
}
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
目的书面记录(标题);
目的写入(大小);
目的地记录列表(文字);
dest.writeInt(data.size());//写入列表大小
对于(字符串[]个字母:数据){
dest.writeStringArray(字母);//写入每个元素
}
}
公共PuzzelSetter(包裹){
title=parcel.readString();
大小=parcel.readInt();
包裹阅读列表(文字);
int size=parcel.readInt();//读取大小
对于(int i=0;i
感谢您的快速回复。我已经用你的代码实现了它,但是我的url现在不起作用。我们有一些服务器问题。所以我还没有测试过。一旦我测试代码,我会让你知道它是否工作。。我想我做错了什么我的清单和清单正在互换。任何想法。放置
packet.readStringList(单词)以上
int size=parcel.readInt()