[英]Android Parcelable List<String[]>
I have a JSON and i wanted to put it into parcelable class so that i can pass its object from one activity to other. 我有一个JSON,我想将其放入可包裹类中,以便可以将其对象从一种活动传递到另一种活动。 i have used Parcelable before several times.
我已经使用过几次Parcelable。 but this time i got confused with how to create the parcelable class with below JSON response.
但是这次我对如何用下面的JSON响应创建可打包类感到困惑。
Actually the confusion is with List<String[]>
arraylist of String[]
how can i pass this. 实际上的混乱是与
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"
]
},
{}
]
I have write my parcelable class like below.. 我已经写了我的包裹类,如下所示。
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);
}
}
Update: 更新:
@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);
}
Any suggestions are welcome. 欢迎任何建议。
Thanks in advance. 提前致谢。
You can write all list elements to parcel separately: 您可以将所有列表元素分别写入地块:
dest.writeInt(data.size()); // write list size
for (String[] letters : data) {
dest.writeStringArray(letters); //write each element
}
And how to read it: 以及如何阅读:
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);
}
UPD: UPD:
In your case: 在您的情况下:
@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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.