当使用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) 理论知识需要储备。
发表评论