@Arbalest-Laevatain
2018-08-22T02:23:27.000000Z
字数 2418
阅读 545
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对象映射成原对象
@Override
public SZcezhan createFromParcel(Parcel in) {
return new SZcezhan(in);
}
// 供外部类反序列化本类数组使用
@Override
public SZcezhan[] newArray(int size) {
return new SZcezhan[size];
}
};
// 内容接口描述,默认返回0即可
@Override
public int describeContents() {
return 0;
}
// 按照声明顺序打包数据到Parcel对象中,既将数据打包到Parcel容器中
@Override
public 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;
}
}