2

Objectからのインスタンス化Parcelがをスローするという問題が発生していますNullPointerException。私のクラスの連絡先Parcelableは、CREATORを実装し、含み、すべての接続が機能しているようです。Contactオブジェクトは、アドレス帳の連絡先を表します。使用される変数は次のタイプです。

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

私が現在取り組んでいるテストでは、有効な姓名、1つの電話番号、およびメモが提供されます。この区画をupackしたときに得られる関連する出力は次のとおりです。

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
    ...

私は間違って何をしていますか?数字を文字列リストとして記述できないのですか、それとも間違ったことをしましたか?

4

1 に答える 1

2

あと数分突っ込んで、自分の間違いに気づきました。メソッドはnull引数readStringListを受け取ることができません。私の新しい方法は次のとおりです。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();
}
于 2012-10-19T18:19:05.357 に答える