博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的Parcelable接口
阅读量:5052 次
发布时间:2019-06-12

本文共 4145 字,大约阅读时间需要 13 分钟。

之前在写一个android一个小项目时,遇到一个问题,当一个实体类中持有一个Bitmap类的对象时,并且该实体类需要进行网络传输时,仅仅实现Serializable会抛出一个异常: 

android.os.BadParcelableExceptionParcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.txrj.sms.model.TxrjContact      

这个异常了之后才知道,Bitmap是android 中的类,默认该类是实现了Parcelable的,并且这个接口不同于java中提供的Serializable。

Serializable,即串行化,或序列化,这是一个标记接口,其作用是将数据对象写入字节流中,必要时可从字节流取出对象,这就是对象的序列化,可用于将数据存储到外存中或者用于网络传输。而android中则提供了Parcelable这个接口,该接口并不像Serializable那样是个标记接口,Parcelable需要实现方法以实现数据能够高效地传输。实现该接口的类的对象可以存储到Parcel中或写入到Parcel中,由于android的系统资源有限,提供Parcelable接口就是为了提高性能,Parcelable接口比Serializable接口性能更高。

下面是实现Parcelable的接口的方法:

package cn.edu.aust.enjoychat.entity;import java.io.Serializable;import java.util.Date;import android.graphics.Bitmap;import android.os.Parcel;import android.os.Parcelable;public class ContactItem implements Parcelable,Serializable{	private static final long serialVersionUID = 1L; 	// 用户名	private String contactName = "";	// 用户头像图片类型	private String iconType = "jpg";		// 用户头像的图片存储问题	private Bitmap image;		// 出生日期	private String birthday;		// 昵称	private String nickname = "";	// 性别	private String gender = "";	// 地址	private String address = "";	// 所在地区	private String areaLocation = "";	// 个性签名	private String signature = "";	// 邮箱	private String emial = "";	//联系人拥有者名称	private String ownerName;		//联系人经纬度信息	private Position position;		public String getOwnerName() {		return ownerName;	}	public Position getPosition() {		return position;	}	public void setPosition(Position position) {		this.position = position;	}	public void setOwnerName(String ownerName) {		this.ownerName = ownerName;	}	public String getContactName() {		return contactName;	}	public void setContactName(String contactName) {		this.contactName = contactName;	}	public String getIconType() {		return iconType;	}	public void setIconType(String iconType) {		this.iconType = iconType;	}	public Bitmap getImage() {		return image;	}	public void setImage(Bitmap image) {		this.image = image;	}	public String getBirthday() {		return birthday;	}	public void setBirthday(String birthday) {		this.birthday = birthday;	}	public String getNickname() {		return nickname;	}	public void setNickname(String nickname) {		this.nickname = nickname;	}	public String getGender() {		return gender;	}	public void setGender(String gender) {		this.gender = gender;	}	public String getAddress() {		return address;	}	public void setAddress(String address) {		this.address = address;	}	public String getAreaLocation() {		return areaLocation;	}	public void setAreaLocation(String areaLocation) {		this.areaLocation = areaLocation;	}	public String getSignature() {		return signature;	}	public void setSignature(String signature) {		this.signature = signature;	}	public String getEmial() {		return emial;	}	public void setEmial(String emial) {		this.emial = emial;	}		 public static final Parcelable.Creator
CREATOR = new Creator
() { public ContactItem createFromParcel(Parcel source) { ContactItem item = new ContactItem(); item.contactName = source.readString(); item.iconType = source.readString(); item.image = Bitmap.CREATOR.createFromParcel(source); item.birthday = source.readString(); item.nickname = source.readString(); item.gender = source.readString(); item.address = source.readString(); item.areaLocation = source.readString(); item.signature = source.readString(); item.emial = source.readString(); return item; } public ContactItem[] newArray(int size) { return new ContactItem[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(contactName); dest.writeString(iconType); image.writeToParcel(dest, 0); dest.writeString(birthday); dest.writeString(nickname); dest.writeString(gender); dest.writeString(address); dest.writeString(areaLocation); dest.writeString(signature); dest.writeString(emial); } }

 

 

转载于:https://www.cnblogs.com/jasongaoh/p/7834247.html

你可能感兴趣的文章
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
SVN服务器搭建和使用(三)(转载)
查看>>
Android 自定义View (三) 圆环交替 等待效果
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
HEVC播放器出炉,迅雷看看支持H.265
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
【安卓5】高级控件——拖动条SeekBar
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android入门之文件系统操作(二)文件操作相关指令
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
Swift 中的指针使用
查看>>
Swift - 使用闭包筛选过滤数据元素
查看>>
alue of type java.lang.String cannot be converted to JSONObject
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
JAVA设计模式之简单工厂模式与工厂方法模式
查看>>
③面向对象程序设计——封装
查看>>
【19】AngularJS 应用
查看>>
Spring
查看>>
Linux 系统的/var目录
查看>>