Unparcel Error Android

时间:2012-10-19 18:13:55

标签: android android-intent nullpointerexception parcelable parcel

我遇到了一个问题,即从Object实例化Parcel会引发NullPointerException。我的类联系人实现Parcelable,包含一个CREATOR,所有连接似乎都有效。 联系人对象表示地址簿中的联系人。使用的变量类型:

String firstName, lastName, note;
List<String> emails, phones;

构造函数将所有字符串初始化为“”,并将所有列表初始化为空列表。 writeToParcelContact(Parcel in)方法如下所示:

public void writeToParcel(Parcel out, int flags) {
    out.writeString(firstName);
    out.writeString(lastName);

    //If there are emails, write a 1 followed by the list. Otherwise, write a 0
    if (!emails.isEmpty())
    {
        out.writeInt(1);
        out.writeStringList(emails);
    }
    else
        out.writeInt(0);

    //If there are phone numbers, write a 1 followed by the list. Otherwise, write a 0
    if (!phones.isEmpty())
    {
        out.writeInt(1);
        out.writeStringList(phones);
    }
    else
        out.writeInt(0);
    out.writeString(note);
}

...

public Contact(Parcel in)
{
    firstName = in.readString();
    Log.i(TAG, firstName);
    lastName = in.readString();
    Log.i(TAG, lastName);
    int emailsExist = in.readInt();
    if (emailsExist == 1)
        in.readStringList(emails);
    else
        emails = new ArrayList<String>();
    int phonesExist = in.readInt();
    if (phonesExist == 1)
        in.readStringList(phones);//Line 80, where this app breaks
    else
        phones = new ArrayList<String>();
    note = in.readString();
}

我目前正在进行的测试提供了有效的名字和姓氏,一个电话号码和一个便条。我在解决这个问题时获得的相关输出如下:

FATAL EXCEPTION: main
java.lang.RuntimeException: Failure delivering result ResultInfo...
...
Caused by: java.lang.NullPointerException
    at android.os.Parcel.readStringList(Parcel.java:1718)
    at com.mycompany.android.Contact.<init>(Contact.java:80) //This is the line marked above
    at com.mycompany.android.Contact$1.createFromParcel(Contact.java:40) //This is inside the CREATOR
    ...

我做错了什么?数字不能写成字符串列表,还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

我只是捅了几分钟,意识到我的错误。 readStringList方法无法接收 null 参数。我新的Contact(Parcel in)方法如下:

public Contact(Parcel in)
{
    firstName = in.readString();
    Log.i(TAG, firstName);
    lastName = in.readString();
    Log.i(TAG, lastName);
    int emailsExist = in.readInt();
    emails = new ArrayList<String>();
    if (emailsExist == 1)
        in.readStringList(emails);
    int phonesExist = in.readInt();
    phones = new ArrayList<String>();
    if (phonesExist == 1)
        in.readStringList(phones);          
    note = in.readString();
}