BadParcelableException:Parcelable protocol requires a Parcelable 错误

来源:互联网 发布:qq影音mac官方下载 编辑:程序博客网 时间:2024/06/07 07:07

在Android中的不同Activity之间传递对象,采用Bundle.putParcelable(Key, Object)时,在实现Parcelable接口的时候要注意一下方面;

/**

* 必须实现Parcelable.Creator接口,否则在获取该类数据的时候会报错

* android.os.BadParcelableException:Parcelable protocol requires a
* Parcelable.Creator object called CREATOR on class

* Parcelable.Creator接口实现了从Parcel容器读取本对象(Teacher)数据,并返回该对象给逻辑层使用

* Parcelable.Creator接口对象名必须为CREATOR,否则同样会报上述同样的错误;

* 在读取Parcel容器中的数据事,必须按成员变量声明的顺序来读取数据,不然会出现获取数据错误;

* 反序列化对象 

*/

Teacher.java

package com.cn;import android.os.Parcel;import android.os.Parcelable;public class Teacher implements Parcelable {/** * BadParcelableException:Parcelable protocol requires a Parcelable.Creator * object called CREATOR on class *///成员变量private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}/** * 必须实现Parcelable.Creator接口,否则在获取该类数据的时候会报错 *  * android.os.BadParcelableException:Parcelable protocol requires a * Parcelable.Creator object called CREATOR on class *  * Parcelable.Creator接口实现了从Parcel容器读取本对象(Teacher)数据,并返回该对象给逻辑层使用 *  * Parcelable.Creator接口对象名必须为CREATOR,否则同样会报上述同样的错误; *  * 在读取Parcel容器中的数据事,必须按成员变量声明的顺序来读取数据,不然会出现获取数据错误; *  * 反序列化对象  */public static final Parcelable.Creator<Teacher> CREATOR = new Creator<Teacher>() {@Overridepublic Teacher createFromParcel(Parcel source) {// 必须按成员变量的顺序读取数据,不然会出现获取数据报错Teacher teacher = new Teacher();teacher.setName(source.readString());teacher.setAge(source.readInt());return teacher;}@Overridepublic Teacher[] newArray(int size) {// TODO Auto-generated method stubreturn new Teacher[size];}};@Overridepublic int describeContents() {// TODO Auto-generated method stubreturn 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {// 必须按成员变量声明的顺序封装数据,不然会出现获取数据报错// 序列化对象dest.writeString(name);dest.writeInt(age);}}


Activity发送数据的主要代码

Teacher teacher = new Teacher();teacher.setName("老师");teacher.setAge(33);Intent intent = new Intent(First_Activity.this,Second_Activity.class);Bundle bundle = new Bundle();bundle.putParcelable("teacher", teacher);intent.putExtras(bundle);startActivity(intent);


Activity接收数据的主要代码

// 通过实现Parcelable接口后接收数据txt_5 = (TextView) findViewById(R.id.txt_5);Bundle bundle = getIntent().getExtras();Teacher teacher = (Teacher) bundle.getParcelable("teacher");txt_5.setText(teacher.getName() + "---" + teacher.getAge());



0 0
原创粉丝点击