Intent传递对象的几种方式
2018-01-28 14:36
621 查看
原创文章。转载请注明 http://blog.csdn.net/leejizhou/article/details/51105060 李济洲的博客
Intent的使用方法相信你已经比較熟悉了,Intent能够用来启动Activity,Service等等,同一时候我们也能够通过Intent来进行传递数据,比方以下代码
putExtra尽管能够传递大多数的Java数据类型。但还是有限的,当你想传递一些自己定义对象的时候就会发现无从下手,SO,本篇博文介绍下利用Intent传递对象的几种实现方式,Android中Intent传递对象有两种方式一种是通过实现Serializable接口传递对象。一种是通过实现Parcelable接口传递对象。Serializable是Java提供的序列化接口,而Parcelable的Android团队设计的,两者各有利弊。
以下先介绍Serializable怎样使用
Serializable是序列化的意思,表示将一个对象转换成可储存或可传输的状态。对象进行Serializable序列化之后就能够通过Intent来进行Activity之间的传输了。
比方像以下这样SerObject类实现Serializable接口 —- SerObject.java
这里面的serialVersionUID须要注意一下,它的作用是序列化和反序列化时保持版本号的兼容性,假设你未指定,执行时也会默认生成。在进行反序列化时仅仅有数据和当前类的serialVersionUID同样是才干够正常的反序列化。你不指定serialVersionUID普通情况下也不会出问题。可是假设当前类发生了改变比如删掉了某个成员变量那么当前类的serialVersionUID也会出现改变,之后你对数据进行反序列化就会出现错误,这里我指定为1L,L为Long数据类型。
接下来进行对象的传递 ,通过Intent携带对象数据。来启动Activity2
然后在Activity2中读取数据并打印
通过Log能够看出成功的将对象传到了Activity2中
Serializable的使用非常easy。以下介绍下Parcelable的接口怎样实现
Parcelable的序列化原理是将一个对象进行分解,而分解后的每一部分都是Intent所支持的数据类型。因此实现了传递对象的功能。
比如以下的 ParObject类
能够看到通过Parcelable的实现方式是要复杂非常多的。实现Parcelable接口后。须要重写writeToParcel和describeContents方法,describeContents方法直接返回0就能够了,writeToParcel方法我们须要调用Parcel对象进行数据写入,比如dest.writeString(name),注意假设name是字符串类型就调用writeString,假设是Int类型就调用writeInt 等等,參考上面代码。
然后还要在这个类中实现一个名为CREATOR的常量,这里创建了Parcelable.Creator接口的一个实现,并将泛型指定为ParObject(參考上面代码),然后去重写createFromParcel和newArray两个方法,在createFromParcel中通过
Parcel去读取刚才通过writeToParcel写入的数据并返回ParObject对象,注意这里的read要和write时候的顺序一样,newArray方法仅仅要new 一个ParObject类的数组。并将size作为数组大小就OK了。
这样Parcelable的接口实现就OK了。缺点就是数据写入和读取等等方法须要手动去实现
。我相信你看的脑袋都大了,当然不能忘了Android Studio这个强大的工具,当你写好java类并实现了Parcelable 那么兴许的writeToParcel createFromParcel newArray等等一系列繁琐代码都将自己主动实现。
类实现Parcelable 然后点到类名上 Alt+enter:
接下来对象的传递就简单多了 和Serializable相似
然后在Activitry2中接收并打印
对象成功传递
Ok 通过Intent传递对象的两种方式介绍完了,Serializable和Parcelable各有利弊,Serializable代码简单,可是开销非常大。对androidAPP的性能会有一定的影响,相比,Parcelable使用起来比較麻烦,可是效率比較高,也是android推荐的序列化方式。总结:在内存中的序列化比如Intent传递推荐Parcelable。存储到设备或者进行网络传输推荐Serializable。欢迎大家在下方留言
PS 以后訪问我的博客能够直接在浏览器键入 www.lijizhou.com就会自己主动跳转到CSDN
本篇博文 源码下载地址 http://download.csdn.net/detail/leejizhou/9485885
Intent的使用方法相信你已经比較熟悉了,Intent能够用来启动Activity,Service等等,同一时候我们也能够通过Intent来进行传递数据,比方以下代码
Intent intent=new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name","lijizhou"); intent.putExtra("age",22); startActivity(intent);
putExtra尽管能够传递大多数的Java数据类型。但还是有限的,当你想传递一些自己定义对象的时候就会发现无从下手,SO,本篇博文介绍下利用Intent传递对象的几种实现方式,Android中Intent传递对象有两种方式一种是通过实现Serializable接口传递对象。一种是通过实现Parcelable接口传递对象。Serializable是Java提供的序列化接口,而Parcelable的Android团队设计的,两者各有利弊。
以下先介绍Serializable怎样使用
Serializable是序列化的意思,表示将一个对象转换成可储存或可传输的状态。对象进行Serializable序列化之后就能够通过Intent来进行Activity之间的传输了。
比方像以下这样SerObject类实现Serializable接口 —- SerObject.java
public class SerObject implements Serializable { private static final long serialVersionUID=1L; private String name; private String age; public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这里面的serialVersionUID须要注意一下,它的作用是序列化和反序列化时保持版本号的兼容性,假设你未指定,执行时也会默认生成。在进行反序列化时仅仅有数据和当前类的serialVersionUID同样是才干够正常的反序列化。你不指定serialVersionUID普通情况下也不会出问题。可是假设当前类发生了改变比如删掉了某个成员变量那么当前类的serialVersionUID也会出现改变,之后你对数据进行反序列化就会出现错误,这里我指定为1L,L为Long数据类型。
接下来进行对象的传递 ,通过Intent携带对象数据。来启动Activity2
SerObject obj=new SerObject(); obj.setName("Serializable"); obj.setAge("22"); Intent mIntent = new Intent(MainActivity.this,Activity2.class); mIntent.putExtra("Ser",obj); startActivity(mIntent);
然后在Activity2中读取数据并打印
SerObject serObject = (SerObject)getIntent().getSerializableExtra("Ser"); Log.i("log",serObject.getName()+"----"+serObject.getAge());
通过Log能够看出成功的将对象传到了Activity2中
Serializable的使用非常easy。以下介绍下Parcelable的接口怎样实现
Parcelable的序列化原理是将一个对象进行分解,而分解后的每一部分都是Intent所支持的数据类型。因此实现了传递对象的功能。
比如以下的 ParObject类
public class ParObject implements Parcelable { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(age); } protected ParObject(Parcel in) { name = in.readString(); age = in.readString(); } public ParObject(){ } public static final Creator<ParObject> CREATOR = new Creator<ParObject>() { @Override public ParObject createFromParcel(Parcel in) { return new ParObject(in); } @Override public ParObject[] newArray(int size) { return new ParObject[size]; } }; }
能够看到通过Parcelable的实现方式是要复杂非常多的。实现Parcelable接口后。须要重写writeToParcel和describeContents方法,describeContents方法直接返回0就能够了,writeToParcel方法我们须要调用Parcel对象进行数据写入,比如dest.writeString(name),注意假设name是字符串类型就调用writeString,假设是Int类型就调用writeInt 等等,參考上面代码。
然后还要在这个类中实现一个名为CREATOR的常量,这里创建了Parcelable.Creator接口的一个实现,并将泛型指定为ParObject(參考上面代码),然后去重写createFromParcel和newArray两个方法,在createFromParcel中通过
Parcel去读取刚才通过writeToParcel写入的数据并返回ParObject对象,注意这里的read要和write时候的顺序一样,newArray方法仅仅要new 一个ParObject类的数组。并将size作为数组大小就OK了。
这样Parcelable的接口实现就OK了。缺点就是数据写入和读取等等方法须要手动去实现
。我相信你看的脑袋都大了,当然不能忘了Android Studio这个强大的工具,当你写好java类并实现了Parcelable 那么兴许的writeToParcel createFromParcel newArray等等一系列繁琐代码都将自己主动实现。
类实现Parcelable 然后点到类名上 Alt+enter:
接下来对象的传递就简单多了 和Serializable相似
ParObject obj=new ParObject(); obj.setName("Parcelable"); obj.setAge("22"); Intent mIntent = new Intent(MainActivity.this,Activity2.class); mIntent.putExtra("Par",obj); startActivity(mIntent);
然后在Activitry2中接收并打印
ParObject parObject = (ParObject)getIntent().getParcelableExtra("Par"); Log.i("log",parObject.getName()+"----"+parObject.getAge());
对象成功传递
Ok 通过Intent传递对象的两种方式介绍完了,Serializable和Parcelable各有利弊,Serializable代码简单,可是开销非常大。对androidAPP的性能会有一定的影响,相比,Parcelable使用起来比較麻烦,可是效率比較高,也是android推荐的序列化方式。总结:在内存中的序列化比如Intent传递推荐Parcelable。存储到设备或者进行网络传输推荐Serializable。欢迎大家在下方留言
PS 以后訪问我的博客能够直接在浏览器键入 www.lijizhou.com就会自己主动跳转到CSDN
本篇博文 源码下载地址 http://download.csdn.net/detail/leejizhou/9485885
相关文章推荐
- android 关于intent传递类对象的几种方式
- Intent传递对象的几种方式
- Intent传递对象的几种方式
- Intent传递对象的几种方式
- Intent传递对象的两种方式
- Intent传递值对象的两种方式:Serializable和Parcelable
- Android系列之Intent传递对象的几种实例方法
- Android实用开发技巧之二:用Serializable方式及Parcelable方式实现Intent传递对象功能
- Android之使用 Intent 传递对象(一)Serializable 方式
- Android中Intent传递对象的3种方式详解(Serializable、Parcelable、JSON)
- Android之使用 Intent 传递对象(一)Parcelable 方式
- Android Intent参数传递,包括对象复杂集合等多方式传递
- 使用Intent传递对象的两种方式(序列化)
- Intent传递对象(两种序列化方式Serializable/Parcelable)
- Intent传递对象信息方式Parcelable和Serializable(序列化)
- Intent传递对象的两种方式(putSerializable,putParelable)
- Jersey使用总结一(jersey初步使用和简单post请求几种参数传递,String方式,不含对象操作)
- Android使用Intent传递对象的两种方式
- Android中Intent传递对象的3种方式详解
- 使用Intent传递对象的两种方式