我试图将一些数据从主活动打包到另一个活动,并将数据显示在ListView中。我在我的MainActivity中有一个按钮,它创建和意图,并将数据传送到其他活动。然而,只要我一按下按钮,应用程序就会与BadParcelableException崩溃。有人能解释一下为什么会发生这种事吗?
这是我在MainActivity中的代码:
public class MainActivity extends Activity {
private Button mButton;
public static String EXTRA_KEY = "key_extra";
private Person[] mPersons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPersons = new Person[1];
mPersons[0] = new Person("GEORGI",23);
mPersons[0] = new Person("Mariya",21);
mButton = (Button) findViewById(R.id.parcelBTN);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,ReceiveParcelActivity.class);
intent.putExtra(EXTRA_KEY,mPersons);
startActivity(intent);
}
});
}这是第二项活动:
public class ReceiveParcelActivity extends ListActivity {
private Person[] mPersons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_parcel);
Intent intent = getIntent();
Parcelable[] parcelables = intent.getParcelableArrayExtra(MainActivity.EXTRA_KEY);
mPersons = Arrays.copyOf(parcelables,parcelables.length,Person[].class);
ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this,android.R.layout.simple_list_item_1,mPersons);
setListAdapter(adapter);
}这是实现Parcelable接口的Person类。
public class Person implements Parcelable {
private String mName;
private int mAge;
public Person(String name, int age) {
mName = name;
mAge = age;
}
public Person(Parcel parcel) {
mName = parcel.readString();
mAge = parcel.readInt();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mName);
dest.writeInt(mAge);
}
private static Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
return new Person(source);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};发布于 2015-05-22 18:05:01
我想出什么事了。我宣布造物主为私人。在公开之后,它解决了这个问题。但是,现在我不知道如何将数据显示到ListActivity中,我的意思是,现在只有一行,那就是Person对象的内存地址。

发布于 2015-05-22 18:11:44
请尝试遵循此模式,它相当隐式地定义了类中指定的所有字段:
public class Person implements Parcelable {
private String mName;
private int mAge;
public Person(String name, int age) {
mName = name;
mAge = age;
}
// ##### PARCELABLE ROUTINES #####
private static final String KEY_NAME = "key_name";
private static final String KEY_AGE = "key_age";
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
Bundle b = new Bundle();
b.putString(KEY_NAME, mName);
b.putInt(KEY_AGE, mAge);
parcel.writeBundle(b);
}
public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Bundle b = source.readBundle();
b.setClassLoader(getClass().getClassLoader());
String name = b.getString(KEY_NAME);
int age = b.getInt(KEY_AGE);
return new Person(name, age);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}https://stackoverflow.com/questions/30403014
复制相似问题