@Arbalest-Laevatain
2018-08-22T02:23:27.000000Z
字数 2418
阅读 633
Android
在某些时候需要把对象、对象数组整个从一个Activity传值到另外一个Activity时,需要先把对象的类序列化,再做操作
Parcelable法只是其中一种方法
将对象序列化为一个Parcel对象。
描述内容接口,默认返回0。实例化静态内部对象CREATOR实现接口Parcelable.Creator。其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。需重写本接口中的两个方法:
createFromParcel(Parcel in)
实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size)
创建一个类型为T,长度为size的数组,仅一句话即可(return new T[size]),供外部类反序列化本类数组使用。
package com.example.administrator.myapplication01;public class SZcezhan{double qianshiju;//定义前视距double houshiju;//定义后视距double shijucha;//视距差double shijuleijicha;//视距累积差int qiandushucha;//定义了前视黑红面读数差int houdushucha;//定义了后视黑红面读数差int heigaocha;//黑面高差int honggaocha;//红面高差int gaochacha;//定义了红黑面高差之差int zhuandian;//测段前视点的转点标识double gaochazhongshu;//高差中数}
package com.example.administrator.myapplication01;import android.os.Parcel;import android.os.Parcelable;import java.io.Serializable;/*** Created by Administrator on 2018/7/24.*/public class SZcezhan implements Parcelable{double qianshiju;//定义前视距double houshiju;//定义后视距double shijucha;//视距差double shijuleijicha;//视距累积差int qiandushucha;//定义了前视黑红面读数差int houdushucha;//定义了后视黑红面读数差int heigaocha;//黑面高差int honggaocha;//红面高差int gaochacha;//定义了红黑面高差之差int zhuandian;//测段前视点的转点标识double gaochazhongshu;//高差中数protected SZcezhan(Parcel in) {// 在读取Parcel容器里的数据时,必须按成员变量声明的顺序读取数据,不然会出现获取数据出错qianshiju = in.readDouble();houshiju = in.readDouble();shijucha = in.readDouble();shijuleijicha = in.readDouble();qiandushucha = in.readInt();houdushucha = in.readInt();heigaocha = in.readInt();honggaocha = in.readInt();gaochacha = in.readInt();zhuandian = in.readInt();gaochazhongshu = in.readDouble();}public static final Creator<SZcezhan> CREATOR = new Creator<SZcezhan>() {// 再通过createFromParcel将Parcel对象映射成原对象@Overridepublic SZcezhan createFromParcel(Parcel in) {return new SZcezhan(in);}// 供外部类反序列化本类数组使用@Overridepublic SZcezhan[] newArray(int size) {return new SZcezhan[size];}};// 内容接口描述,默认返回0即可@Overridepublic int describeContents() {return 0;}// 按照声明顺序打包数据到Parcel对象中,既将数据打包到Parcel容器中@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeDouble(qianshiju);dest.writeDouble(houshiju);dest.writeDouble(shijucha);dest.writeDouble(shijuleijicha);dest.writeInt(qiandushucha);dest.writeInt(houdushucha);dest.writeInt(heigaocha);dest.writeInt(honggaocha);dest.writeInt(gaochacha);dest.writeInt(zhuandian);dest.writeDouble(gaochazhongshu);}public SZcezhan() {//this.name = "未知";//this.age = 18;}}