0

クラスのインスタンスの配列を追加したいのですがPerson、このクラスはParcelable. 以下のコードを試しました

setResult(Activity.RESULT_OK, new Intent().putExtra("persons", persons));
finish();

配列を送信側アクティビティのインテントに格納し、受信側アクティビティの次のコードでそれを取得します

if(requestCode == PERSON_REQUEST_CODE && resultcode == Activity.RESULT_OK)
    persons = (Person[]) data.getParcelableArrayExtra("persons"); // persons is Person[]

ただし、実行するとエラーが発生します

07-26 06:29:59.560: E/AndroidRuntime(632): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class Person

配列をにキャストしているため、実行されていませんPerson[]か?

編集

これが私のPersonクラスです

import android.os.Parcel;
import android.os.Parcelable;

public class Person implements Parcelable {
    private String fname;
    private String lname;

    public Person() {}

    Person(Parcel in) {
        this.fname = in.readString();
        this.lname = in.readString();
    }

    public void setFirstName(String fname) { this.fname = fname; }
    public void setLastName(String lname)  { this.lname = lname; }

    public String getFirstName() { return fname; }
    public String getLastName()  { return lname; }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(fname);
        dest.writeString(lname);
    }

    static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }

        @Override
        public Person createFromParcel(Parcel source) {
            return new Person(source);
        }
    };
}

編集#2

以下のコードを書くことで解決できました

Parcelable[] parcelablePersons = data.getParcelableArrayExtra("persons");
persons = new Person[parcelablePersons.length];
for(int i = 0; i < parcelablePersons.length; i++) {
    persons[i] = (Person) parcelablePersons[i];
}
4

1 に答える 1

3

インスタンスCREATORは公開されている必要があります。現在、パッケージ非公開です。

于 2014-07-26T07:06:49.000 に答える