Android使用Parcelable传递对象
来源:互联网 发布:淘宝网上预订鲜花 编辑:程序博客网 时间:2024/06/05 20:43
在开发中,我们经常要通过Bundle来传递对象,而Bundle则提供了两个方法供我们调用,两个如下:
putParcelable(String key, Parcelable value);putSerializable(String key, Serializable value);
通过名字我们就可以知道,第一个方法使用Parcelable来传递数据,第二个方法则是通过Serializable来传递数据,对于第二种方法呢,没有什么可以讲的,只需要实现该接口即可,示例代码如下:
public class Person implements Serializable { private static final long serialVersionUID = -7060210544600464481L; 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接口
public class User implements Parcelable { public String name; public String nickname; public int age; public byte isMemoy; ...}
第二步:重写里面的writeToParcel方法,很简单
//该方法一般我们不去理会他,直接返回0即可,按照文档描述:应该是描述的在Parcelable里面特殊对象的位掩码之类的。@Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(nickname);// dest.writeInt(age); //不在这里指定,则在传数据的时候不传该数据 dest.writeByte(isMemoy); }
第三步:定义变量Parcelable.Creator<>,如下
public static final Parcelable.Creator<User> CREATOR = new Creator<User>() { @Override public User[] newArray(int size) { return new User[size]; } //一定要注意:写入parcel和反序列化parcel时顺序一定要相同,不然数据会出错。 @Override public User createFromParcel(Parcel source) { User user = new User(); user.name = source.readString(); user.nickname = source.readString();// user.age = source.readInt(); user.isMemoy = source.readByte(); return user; } };
经过这三步,那么这个对象就支持使用使用Bundle来传递对象了,不过要注意:写入parcel和反序列化parcel时顺序一定要相同,不然数据会出错。
最后附上完整的实现:
import android.os.Parcel;import android.os.Parcelable;public class User implements Parcelable { public String name; public String nickname; public int age; public byte isMemoy; public static final Parcelable.Creator<User> CREATOR = new Creator<User>() { @Override public User[] newArray(int size) { return new User[size]; } //一定要注意:写入parcel和反序列化parcel时顺序一定要相同,不然数据会出错。 @Override public User createFromParcel(Parcel source) { User user = new User(); user.name = source.readString(); user.nickname = source.readString();// user.age = source.readInt(); user.isMemoy = source.readByte(); return user; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(nickname);// dest.writeInt(age); dest.writeByte(isMemoy); }}
经过这么一定义,就可以了,但是另外要注意,传递此对象时,只支持name,nickname,isMemoy这三个字段,age不支持,这样在传递的时候,就可以有效避免数据的安全了。
0 0
- Android使用Parcelable传递对象
- Android 使用Parcelable传递对象
- android intent传递Parcelable对象
- Android使用Parcelable传递对象方法及注意事项
- Android使用Parcelable传递对象方法及注意事项
- Android 使用Parcelable接口在进程间传递对象
- Android之使用 Intent 传递对象(一)Parcelable 方式
- android之传递对象(Parcelable,Serializable)
- android之传递对象(Parcelable,Serializable)
- Android中Intent传递对象(Serializable,Parcelable)
- Android Intent传递对象 Serializable & Parcelable
- 使用 Intent传递对象(Parcelable方式)
- 使用Serializable和 parcelable传递对象
- Android中使用Parcelable传递对象,createFromParcel中对象的赋值次序
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- iOS开发UI篇—在UItableview中实现加载更多功能
- 可复用View的PagerAdapter,RecyclePagerAdapter
- 杂项
- 详解super关键字
- 《Servlet与JSP核心编程第二版》阅读记录004-第二个与第三个servlet示例程序-补充
- Android使用Parcelable传递对象
- IOS 蓝牙
- HDU 1269(Tarjan模板)
- python错误:ImportError: No module named setuptools解决办法
- STL中栈与队列的使用
- android权限
- efi系统分区是什么?efi系统分区怎么删除?
- struts2 package name作用
- 西方在线新闻的自动观点分类架构(IEEE2014)