首先我必须说我一直在这个网站上寻找我的问题的答案,我发现了几个关于这个异常的主题,但毕竟这些线程对我没有太大帮助,所以这就是我发布的原因这。
每次尝试从包裹中恢复信息时,我都会收到 Bad Parcelable 异常。这是我的课程代码。
public class Persona implements Parcelable {
private String nombre,email,tel;
public Persona() {
nombre = "";
email = "";
tel = "";
}
public Persona(String nombre, String email, String tel) {
this.nombre = nombre;
this.email = email;
this.tel = tel;
}
public Persona(Parcel p){
setNombre(p.readString());
setEmail(p.readString());
setTel(p.readString());
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return this.getNombre() + " " + this.getEmail() + " " + this.getTel();
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel des, int flags) {
des.writeString(getNombre());
des.writeString(getEmail());
des.writeString(getTel());
}
public static final Parcelable.Creator<Persona> creator = new Creator<Persona>() {
public Persona createFromParcel(Parcel source) {
return new Persona(source);
}
public Persona[] newArray(int size) {
return new Persona[size];
}
};
}
还有我的活动代码(此活动检索带有我刚刚指定的类型的 ArrayList 的意图)
public class Contacts extends Activity {
private ArrayAdapter<String> names;
private Intent intent;
private ArrayList<String>nameList;
private ListView list;
public Contacts() {
intent = new Intent();
nameList = new ArrayList<String>();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts);
setIntent(getIntent());
iterateContacts();
names = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getNameList());
getList().setAdapter(getNames());
}
public void iterateContacts(){
ArrayList<Persona> aux = GetIntent().getParcelableArrayListExtra("contactList");
for(int i = 0; i<aux.size(); i++){
String name = aux.get(i).getNombre();
getNameList().add(name);
}
}
public ArrayAdapter<String> getNames() {
return names;
}
public void setNames(ArrayAdapter<String> names) {
this.names = names;
}
public Intent GetIntent() {
return intent;
}
public void setIntent(Intent intent) {
this.intent = intent;
}
public ArrayList<String> getNameList() {
return nameList;
}
public void setNameList(ArrayList<String> nameList) {
this.nameList = nameList;
}
public ListView getList() {
return list;
}
public void setList(ListView list) {
this.list = list;
}
}
日志猫:
E/AndroidRuntime(861): FATAL EXCEPTION: main
09-10 02:39:10.738: E/AndroidRuntime(861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.take2/com.take2.Contacts}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.take2.Persona
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.ActivityThread.access$600(ActivityThread.java:130)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.os.Handler.dispatchMessage(Handler.java:99)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.os.Looper.loop(Looper.java:137)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.ActivityThread.main(ActivityThread.java:4745)
09-10 02:39:10.738: E/AndroidRuntime(861): at java.lang.reflect.Method.invokeNative(Native Method)
09-10 02:39:10.738: E/AndroidRuntime(861): at java.lang.reflect.Method.invoke(Method.java:511)
09-10 02:39:10.738: E/AndroidRuntime(861): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-10 02:39:10.738: E/AndroidRuntime(861): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-10 02:39:10.738: E/AndroidRuntime(861): at dalvik.system.NativeStart.main(Native Method)
09-10 02:39:10.738: E/AndroidRuntime(861): at com.take2.Contacts.onCreate(Contacts.java:28)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.Activity.performCreate(Activity.java:5008)
09-10 02:39:10.738: E/AndroidRuntime(861): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)