Android中Intent传递自定义对象类型的数据

Android中Intent是用来实现组件之间的通信的,可以在组件之间传递数据。可以传递一些基本类型的数据,也可以传递自定义对象类型的数据,但是如果要传递自定义类型的对象数据,这个自定义类型的对象必须是实现了Serializable接口或者是实现Parcelable接口。

1.实现Serializable接口的对象
实现Serializable接口非常简单,Serializable接口中没有需要实现的函 数。直接使用implements关健字即可,无需其他操作。

      public class User implements Serializable{
      private int id;
      private String name;
      public  User(){
      }
      public User(int id,String name){
         this.id=id;
         this.name=name; 
      }
      public void setId(int id ){
         this.id=id;
        } 
      public int getId(){
            return id;
          }
      public void setName(String name){
           this.name=name;
         }      
      public String getName(){
           return name;
         }   
     }

上述代码就是定义了一个实现了Serializable接口的User对象,这个User对象就可以被Intent中传递。

传递该对象类型的数据

User  user=new User(1,"张三");
intent.putExtra("user",user);

获取该对象类型的数据

getIntent().getSerializableExtra("user");

2.实现Parcelable接口的对象
实现Parcelable接口步骤:
(1)重写describeContents方法,默认返回0就可以。
(2)重写writeToParcel方法。
(3)实例化静态内部类对象CREATOR

public class User implements Parcelable{
 private int id;
      private String name;
      public  User(){
      }
      public User(int id,String name){
         this.id=id;
         this.name=name; 
      }
      public void setId(int id ){
         this.id=id;
        } 
      public int getId(){
            return id;
          }
      public void setName(String name){
           this.name=name;
         }      
      public String getName(){
           return name;
         }   
     }
     public int describeContents(){
         return 0;
      }
     public void writeToParcel(Parcel out,int flags ){
         out.writeInt(id);
         out.writeString(name);
         /* 一定要按照成员变量声明的顺序来打包数据(写数据)*/
      }
     public static final Parcelable.Creaator<User>
     CREATOR=new Parcelbale.Creator<User>(){
     /*返回实现Parcelable接口的单个实例*/
     public User createFromParcel(Parcel source){
           User user=new User();
               user.setId(source.readInt());
               user.setName(source.readString());
               return user;
               /*一定要按照成员变量声明的顺序来读数据*/
     }
     /*返回实现Parcelable接口的多个实例*/
     public User[] newArray(int size){
               return new User[size];
     }
}
}

上述代码是定义了一个实现Parcelable接口的对象,这个User对象也可以被Intent传递。

传递对象类型的数据

User user=new User(1,"张三");
intent.putExtra("user",user);

获取该对象类型的数据

getIntent().getParcelableExtra("user");

实际上让对象实现Serializable接口和Parcelbale接口就是实现对象的序列化。

对象的序列化:把对象数据转成字节序列的过程就称之为对象的序列化。
对象的反序列化:把字节序列恢复成对象数据的过程就是反序列化。

对象序列化的目的:
(1)实现对象数据的持久化 ,就是把对象数据保存到文件、数据库中。
(2)在网络中、程序内部以及程序间传输对象数据。

这两种实现对象序列化方式的比较:
Parcelable的性能要比Serializable好,内存开销小,一般用于内存间数据的传输。如Activity间数据的传输。
Serializable主要用于对象数据的持久化以及网络间对象数据的传输。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值