java - Android 可打包列表<String[]>

标签 java android json parcelable

我有一个 JSON,我想将它放入可打包类中,以便我可以将其对象从一个 Activity 传递到另一个 Activity 。我之前已经使用过 Parcelable 好几次了。但这一次我对如何使用下面的 JSON 响应创建 Parcelable 类感到困惑。

实际上困惑在于 List<String[]> 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);
    }

}

更新:

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

欢迎任何建议。

提前致谢。

最佳答案

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

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

更新:

就您而言:

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

关于java - Android 可打包列表<String[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601517/

相关文章:

java - 从 Firebase 存储检索图像下载 url

java - 无法读取 Selenium 中的属性文件(对象存储库)

Android - 扩展相对布局/图像转换

android - 在 Android 的 TextView 中对齐文本

javascript - Json:编辑深度嵌套的值

java - 如何使用 Apache POI 解密 .doc/docx 文件?

android - 如何获得正确的上下文

ios - 使用 Codable 解码具有多个 key 的 JSON

json - WCF Json GET服务: Check that the sender and receiver's EndpointAddresses agree

java - JPA 2.0 CriteriaBuilder : SELECT FROM … IN