Android Parcelable:如何读/写字符串数组列表和整数数组

时间:2014-08-22 21:37:21

标签: java android parcelable

我在尝试将String数组列表和整数数组写入parcel时遇到问题。

这是我的班级字段

String uniqueDate;
ArrayList <String> set1Numbers;
ArrayList <String> set2Numbers;
ArrayList <String> UIDs;
int[] selectedStatus;

此部分将数据写入parcel

public void writeToParcel(Parcel dest, int flags) 
    {
        dest.writeString(uniqueDate);
        dest.writeStringList(set1Numbers);
        dest.writeStringList(set2Numbers);
        dest.writeStringList(UIDs);
        dest.writeIntArray(selectedStatus);
    }

这部分读了它。我认为问题出在这里

PNItems(Parcel in)
    {
        this.uniqueDate = in.readString();
        in.readStringList(set1Numbers);
        in.readStringList(set2Numbers);
        in.readStringList(UIDs);
        in.readIntArray(selectedStatus);
    }

有人可以告诉我该怎么做,我找不到我的问题在互联网上的教程。感谢您阅读

1 个答案:

答案 0 :(得分:8)

如果查看Parcel的the documentation,readStringList()会显示:

  

在当前的dataPosition()中读入给定的List项目使用writeStringList(List)编写的String对象。

     

返回   新创建的ArrayList,包含与先前写入的数据库相同的数据。

它要求List&lt;&gt;你传入的是非null(因为它将填充它)。由于这是你的构造函数,我希望你的参数为null,这就是你崩溃的原因。您应该使用Parcel#createStringArrayList()返回新的列表:

  

从当前dataPosition()中使用writeStringList(List)编写的parcel中读取并返回一个包含String对象的新ArrayList。如果先前写入的列表对象为null,则返回null。

     

返回   新创建的ArrayList,包含与先前写入的数据库相同的数据。

例如:

set1Numbers = in.createStringArrayList();