クラスのインスタンスの配列を追加したいのですが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];
}