android之Parcelable
java编程中,为了将对象的状态保存,需要将对象序列化。
在android中,序列化有两种方法可供选择,一个是java自带的序列化方法,只需实现Serializeable接口即可;另一个是android提供的方法,要实现Parcelable接口,并实现其中的一些方法,相对要复杂一些。
两者区别:
Parcelable消耗内存少,更加高效。
Serializeable更适合长期保存数据,和网络传输。
下面主要讲解Parceable的使用。
将想要序列化的对象的类实现Parcelable接口,并实现其中的方法:
public class MyParcelable implements Parcelable {
int mData; public MyParcelable(int mData){
this.mData=mData;
} public int describeContents() {
return 0;
} //将对象打包为Parcel类型对象
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
} //将Parcel对象解压为MyParcelable对象
public static final Creator<MyParcelable> CREATOR
= new Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
} public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
}; //从Parcel对象中读取数据
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
在MainActivity中添加到Intent中,并传递:
Intent intent = new Intent(MainActivity.this, SecActivity.class);
Bundle bundle = new Bundle();
MyParcelable myParcelable = new MyParcelable(99);
bundle.putParcelable("myParcelable", myParcelable);
intent.putExtras(bundle);
startActivity(intent);
在SecActivity中获取:
MyParcelable myParcelable=getIntent().getParcelableExtra("myParcelable");
如果新类型中的成员的数据类型为数组、List、Map或自定义类型时:
public class UserInfo implements Parcelable { int age;
MyType[] hobbies;
MyType myType;
List<MyType> list;
HashMap<String, MyType> map; public UserInfo(int age, MyType[] hobbies, MyType myType, List<MyType> list, HashMap<String, MyType> map) {
this.age = age;
this.hobbies = hobbies;
this.myType = myType;
this.list = list;
this.map = map;
} protected UserInfo(Parcel in) {
age = in.readInt();
hobbies = in.createTypedArray(MyType.CREATOR);
myType = in.readParcelable(MyType.class.getClassLoader());
list = in.createTypedArrayList(MyType.CREATOR);
map=in.readHashMap(HashMap.class.getClassLoader());
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeTypedArray(hobbies, flags);
dest.writeParcelable(myType, flags);
dest.writeTypedList(list);
dest.writeMap(map);
} @Override
public int describeContents() {
return 0;
} public static final Creator<UserInfo> CREATOR = new Creator<UserInfo>() {
@Override
public UserInfo createFromParcel(Parcel in) {
return new UserInfo(in);
} @Override
public UserInfo[] newArray(int size) {
return new UserInfo[size];
}
}; @Override
public String toString() {
return "UserInfo{" +
"age=" + age +
", hobbies=" + Arrays.toString(hobbies) +
", myType=" + myType +
", list=" + list +
", map=" + map +
'}';
}
}
public class MyType implements Parcelable{ String name;
int age; public MyType(String name, int age) {
this.name = name;
this.age = age;
} protected MyType(Parcel in) {
name = in.readString();
age = in.readInt();
} public static final Creator<MyType> CREATOR = new Creator<MyType>() {
@Override
public MyType createFromParcel(Parcel in) {
return new MyType(in);
} @Override
public MyType[] newArray(int size) {
return new MyType[size];
}
}; @Override
public int describeContents() {
return 0;
} @Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
} @Override
public String toString() {
return "MyType{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
android之Parcelable的更多相关文章
- Android 使用Parcelable序列化对象
转:http://ipjmc.iteye.com/blog/1314145 Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...
- android 开发Parcelable 怎么传值ArrayList
public class TradeEntity implements Parcelable{ public String id; //有关进度条的参数 ArrayList<TradeState ...
- Android中Parcelable序列化总结
在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...
- Android接口Parcelable的使用
注明:非原创,转载,原链接地址为:http://www.2cto.com/kf/201205/132814.html 和 http://www.blogjava.net/lincode/archive ...
- Android API之android.os.Parcelable
android.os.Parcelable Interface for classes whose instances can be written to and restored from a Pa ...
- Android中Parcelable与Serializable接口用法
转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...
- Android中Parcelable的使用
转载请标明出处 :https://www.cnblogs.com/tangZH/p/10998065.html Parcelable与Serializable Serializable是Java为我 ...
- android基础---->Parcelable的使用
android中Parcelable序列化的使用,简单的记录一下. 目录导航: Serializable在android中的使用 Parcelable在android中的使用 Serializabl ...
- Android中Parcelable的原理和使用方法
Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...
- Android 的Parcelable接口
此文转载自http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html 1. Parcelable接口 Interface ...
随机推荐
- ICPC题目选讲
Traveling in the grid world 题目描述 有一个 \(n\times m\) 的格点图,两点之间走他们的连线,但是这条连线不能恰好覆盖其他整点.还要求相邻两步之间的连线不能斜率 ...
- python基础学习之字符串的功能方法
字符串:str的功能记录(该类需要记忆) .isdecimal():意思是判断是否由数字构成,仅仅可以解析"123" a='123' d=a.isdecimal() p ...
- 对用pyinstaller打包的exe程序进行反编译,获得源码
参考文章: 1.https://www.cnblogs.com/DirWang/p/12018949.html#PyInstallerExtractor 2.https://msd.misuland. ...
- 用程序员的思维了解Filecoin
程序员接触一个新技术惯用步骤: 先搜索引擎搜索一波,找个最简单的解释.如果有了个大概的概念,就前往2.否则循环1->1->1...直到有个大概的概念为止. 上官网跑一遍. 各种论坛社区溜达 ...
- Java中的IO流 - 入门篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...
- QT项目-Chart Themes Example学习(一)
1.main.cpp #include "themewidget.h" #include <QtWidgets/QApplication> #include <Q ...
- Java学习之this关键字的使用
•区分成员变量和局部变量 public class Person { String name; int age; public void set(String name,int age) { this ...
- elementui 表格格式化
<el-table-column prop="userType" label="角色" width="180" :formatter= ...
- [Fundamental of Power Electronics]-PART II-7.交流等效电路建模-7.1 引言
7.1 引言 变换器系统总是需要反馈的.例如,在典型的DC-DC变换器应用中,无论输入电压\(V_{g}(t)\)和输出有效负载\(R\)如何变化,都必须使输出电压\(v(t)\)保持恒定.这是通过构 ...
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...