Android序列化Parcelable
16lz
2021-12-04
Android在各个Activity之间传递List<MealItem>时,需要将MealItem序列化;
而在Android中序列化有两种方式:实现Serializable接口或者实现Parcelable接口,两者可以实现同样的目的,后者效率高但实现不如Serializable方便;
在Android中推荐后者
1. 实现Serializable接口
Serializable是JavaSE中自带的接口,实现起来很简单,只需要在实例类中implementsSerializable即可
<span style="font-size:14px;">public class MealItem implements Serializable{private String name;//菜品名称private String price;//菜品现价private int count;//预订数量public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}</span>
Parcelable是Android中特有的接口,其效率高,因此在Android中被推荐
实现此接口需要实现两个方法以及一个CREATOR:
public int describeContents();
public void writeToParcel(Parcel dest, int flags);
public static final Parcelable.Creator<MealItem> CREATOR = new Creator<MealItem>() {
@Override
public MealItem createFromParcel(Parcel source);
@Override
public MealItem[] newArray(int size);
};
writeToParcel的顺序应该与CREATOR的createFromParcel保持一致
例子如下:可对比实现Serializable时的代码;
<span style="font-size:18px;">public class MealItem implements Parcelable {private String name;//菜品名称private String price;//菜品现价private int count;//预订数量public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeString(price);dest.writeInt(count);}public static final Parcelable.Creator<MealItem> CREATOR = new Creator<MealItem>() {@Overridepublic MealItem createFromParcel(Parcel source) {MealItem mealItem = new MealItem();mealItem.setName(source.readString());mealItem.setPrice(source.readString());mealItem.setCount(source.readInt());return null;}@Overridepublic MealItem[] newArray(int size) {return new MealItem[size];}};}</span>
更多相关文章
- SeekBar自定义样式最优实现
- LinearLayout中实现水平方向上的两个textview一个居左,一个居右的
- Android顶部工具栏和底部工具栏的简单实现代码
- Android(安卓)如何使用GPU硬件加速
- Android实现书籍翻页效果--扩展版
- Android实现书籍翻页效果--扩展版(转)
- android 实现静默安装、卸载(图)
- Android(安卓)如何使用GPU硬件加速
- [Unity3D]Android实现手机震动功能