【Android Studio】开发小记——Serializable和Parcelable

      关于Activity之间利用Intent传输数据的操作应该很了解了吧,不外乎就是现在ActivityA中新建一个Intent变量,用.putExtra(string name,string/int/boolean value)将数据传入其中,然后将这个intent作为.startActivity(Intent intent)的变量来启动ActivityB,在Activity中用getIntent().getStringExtra/getIntExtra/getBooleanExtra(string name)来获取参数即可,但是假如我需要传送的是一个自定义类的变量呢?Serializable和Parcelable就是用于解决这个问题的。

      首先接收Serializable,这个英文的翻译是“序列化”的意思,顾名思义就是将对象转换成可传输的状态,要使用这个方法很简单,只需要在写自定义类的时候,让这个类实现Serializable这个接口即可,这个接口不要求重写任何方法,接着在ActivityA中还是同样的方式把自定义类的变量传入,启动ActivityB,这里开始有点不同,比方说自定义类的类名是Person的话,获取传输来的变量这么写:

Person person=(Person) getIntent().getSerializableExtra(String name)

可以看到,首先是需要强转为Person类,然后用的是.getSerializableExtra()方法来获取。这个方法使用起来非常简便,但是因为需要将变量进行序列化之后再传输,在效率上是有点打折扣的,于是有了Parcelable。

      Parcelable相对来讲就麻烦得多了,首先还是先将自定义类实现Parcelable接口,这个接口需要重写两个方法,describeContents()方法只需要写return 0;即可,writeToParcel(Parcel dest,int flages)里面,需要把这个类的属性写入,dest.writeString/writeInt/writeBoolean()将这个类有的属性都依次写入进去。接着还需要提供一个名为CREATOR的常量,一般我们这么写:

public static final Parcelable.Creator<类名> CREATOR = new Parcelable.Creator<类名>(){

      @override

      public 类名 createFromParcel(Parcel source){

            类名 A=new 类名();

            A.属性1=source.readString/readInt/readBoolean();

            ...............

            return A;}

      @override

      public 类名[] newArray(int size){

            return new 类名[size];}

这是这个接口要求加入的,按照要求写即可,这里需要注意的一点是,在createFromPacel中,为每一个属性赋值的时候,你可能疑惑如果属性里面有多个string,我怎么知道获取的是不是这个属性?有没有ID标识。答案是这里需要按照你在writeToPacel()中写入的顺序读取

      之后的传入方法是一样的,在ActivityB中的读取方法就变成了.getParcelableExtra()而已。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值