好记性不如铅笔头

android, 编程

Android应用开发笔记:传递复杂对象

当使用android的intent传递复杂对象的时候,我们需要使复杂的对象实现Serializable接口或者Parcelable接口,这边就简单的备忘下使用的方法。

发送代码示例:

Locations.LocDesc locDesc = Locations.getInstance().getLocDes(...);
Locations.SpeedInfo speedInfo = Locations.getInstance().calcSpeedInfo(...);
Intent intent = new Intent();
intent.putExtra("Locations.SpeedInfo", speedInfo);
intent.putExtra("Locations.LocDesc", locDesc);

CONTENTS

 1)使用Serializable接口

public static class SpeedInfo implements Serializable
{
	private static final long serialVersionUID = -2575095008092669515L;
}
当我们实现了Serializable接口后,IDE一般会提示我们生成一个id,这样Serializable就可以使用了。

2)使用Parcelable接口

public static class LocDesc implements Parcelable
	{
		public static enum LocTypeEnum
		{
			GPS(R.drawable.loc_gps),
			NET(R.drawable.loc_net),
			FAIL(R.drawable.loc_fail);
			private LocTypeEnum(int imageId) {
				this.imageId = imageId;
			}
			private int imageId;
			public int getImageId() {
				return imageId;
			}
		};
		@Deprecated
		public String locAddr = null;
		public float radius = 0;
		public LocTypeEnum typeEnum = LocTypeEnum.FAIL;
		
		private LocDesc(String locAddr,LocTypeEnum typeEnum, float radius) {
			super();
			this.locAddr = locAddr;
			this.typeEnum = typeEnum;
			this.radius = radius;
		}

		@Override
		public int describeContents() {
			return 0;
		}
		@Override
		public void writeToParcel(Parcel dest, int flags)
		{
			dest.writeString(locAddr);
			dest.writeFloat(radius);
			dest.writeInt(typeEnum.ordinal());
		}
		public static final Creator<LocDesc> CREATOR = new Creator<Locations.LocDesc>() {
			@Override
			public LocDesc[] newArray(int size) 
			{
				return new LocDesc[size];
			}
			
			@Override
			public LocDesc createFromParcel(Parcel source) 
			{
				LocDesc locDesc = new LocDesc(null, null, 0);
				locDesc.locAddr = source.readString();
				locDesc.radius = source.readFloat();
				locDesc.typeEnum = LocTypeEnum.values()[source.readInt()];
				return locDesc;
			}
		}; 
	}  

 使用Parcelabel比较麻烦一些,需要多些很多代码。

备忘:

1)【 http://blog.csdn.net/tedzyc/article/details/8373399 】 对于enum讲的不错,需要仔细看下。

2) 理论知识需要储备。

发表评论

17 − 2 =

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据