实体bean实现序列化parcelable接口的常见问题

在intent中传递对象或者集合的时候,相应的对象要实现序列化。

  1. public class Person implements Parcelable{  
  2.        
  3.      // 成员变量
  4.      private int id;  
  5.      private String name;  
  6.        
  7.      // 1.必须实现Parcelable.Creator,否则在获取Person数据的时候,会报错,如下:  
  8.      // android.os.BadParcelableException:  
  9.      // Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.um.demo.Person  
  10.      // 2.这个接口实现了Percel容器读取Person数据,并返回Person对象给逻辑层使用 
  11.      // 3.实现Parcelable.Creator接口,对象名必须为CREATOR,否则同样会报出上面的错误;  
  12.      // 4.在读取Parcel容器里的数据时,必须按成员变量声明的顺序读取数据,不然会出现获取数据出错 
  13.      // 5.反序列化对象
  14.      public static final Parcelable.Creator<Person> CREATOR = new Creator(){  
  15.    
  16.          @Override  
  17.          public Person createFromParcel(Parcel source) {  
  18.              // TODO Auto-generated method stub  
  19.              // 必须按成员变量声明的顺序读取数据,不然会出现获取数据出错 
  20.              Person p = new Person();  
  21.              p.setId(source.readInt());  
  22.              p.setName(source.readString());  
  23.              return p;  
  24.          }  
  25.    
  26.          @Override  
  27.          public Person[] newArray(int size) {  
  28.              // TODO Auto-generated method stub  
  29.              return new Person[size];  
  30.          }  
  31.      };  
  32.        
  33.      public int getId() {  
  34.          return id;  
  35.      }  
  36.    
  37.      public void setId(int id) {  
  38.          this.id = id;  
  39.      }  
  40.    
  41.      public String getName() {  
  42.          return name;  
  43.      }  
  44.    
  45.      public void setName(String name) {  
  46.          this.name = name;  
  47.      }  
  48.    
  49.      @Override  
  50.      public int describeContents() {  
  51.          // TODO Auto-generated method stub  
  52.          return 0;  
  53.      }  
  54.    
  55.      @Override  
  56.      public void writeToParcel(Parcel dest, int flags) {  
  57.          // TODO Auto-generated method stub  
  58.          // 1.必须按成员变量声明的顺序读取数据,不然会出现获取数据出错  
  59.          // 2.序列化对象
  60.          dest.writeInt(id);  
  61.          dest.writeString(name);  
  62.      }  
  63.  } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Parcelable接口,需要以下几个步骤: 1. 在数据类型所在的包下,创建一个实现Parcelable接口的类,例如: ``` public class MyData implements Parcelable { private int id; private String name; // 构造方法、getter和setter等... // 实现Parcelable接口的方法 @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(id); dest.writeString(name); } public static final Parcelable.Creator<MyData> CREATOR = new Parcelable.Creator<MyData>() { @Override public MyData createFromParcel(Parcel source) { return new MyData(source); } @Override public MyData[] newArray(int size) { return new MyData[size]; } }; private MyData(Parcel in) { id = in.readInt(); name = in.readString(); } } ``` 在这个例子中,我们定义了一个MyData类,它有两个属性:id和name。这个类实现Parcelable接口,并实现了describeContents()和writeToParcel()方法。 2. 在writeToParcel()方法中,我们需要将MyData对象的属性写入到Parcel中。这里我们使用了Parcel的writeInt()和writeString()方法,将id和name写入Parcel中。 3. 在CREATOR实例变量中,我们定义了一个Parcelable.Creator对象,它有两个方法:createFromParcel()和newArray()。createFromParcel()方法用于从Parcel中读取MyData对象,newArray()方法用于创建一个MyData数组。 4. 在MyData的构造方法中,我们从Parcel中读取id和name属性。 完成以上步骤后,MyData类就实现Parcelable接口,可以作为Intent的数据类型使用。在Intent中传递MyData对象时,可以使用putExtra()方法或putParcelableArrayListExtra()方法。在接收Intent的Activity中,可以使用getParcelableExtra()方法或getParcelableArrayListExtra()方法获取MyData对象或MyData对象的ArrayList。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值