2014-09-01 71 views
1

我有一个JSON,我想把它放入parcelable类,以便我可以将其对象从一个活动传递给其他人。我在几次之前使用过Parcelable。但是这一次我对如何用下面的JSON响应创建parcelable类感到困惑。Android Parcelable List <String[]>

其实混淆是List<String[]> arraylist 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" 
    ] 
    }, 
    {} 
    ] 

我有写我parcelable类像下面..

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

任何建议都欢迎。

在此先感谢。

回答

0

你可以写所有的列表元素分别包裹:

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

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();   
    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); 
    } 
} 
+0

感谢您的快速响应。我已经使用你的代码实现它,但我的网址现在不能正常工作。我们有一些服务器问题。所以我没有测试过它。只要我测试代码,我会让你知道它是否工作。 – NaserShaikh 2014-09-01 10:14:08

+0

其不工作..我认为我做错了我的名单和名单正在交换。任何想法。 – NaserShaikh 2014-09-01 13:21:13

+0

你是否以相同的顺序编写和读取字段? – erakitin 2014-09-01 13:23:53

相关问题