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 ...
随机推荐
- Java 树结构实际应用 三(二叉排序树)
二叉排序树 1 先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加 2 解决方案分析 使用数组 数组未排序, 优点:直接在数组尾添 ...
- LayUi表单模块无法正常显示
问题: 当我们再使用LayUI的Form表单模块时,我们会把自己需要的表单赋值到我们的页面中,但是会出现无法正常显示的问题,如下: 出现原因: LayUI官方文档也明确表示:"当你使用表单时 ...
- 仿String()构造器函数 【总结】
需求 实现以下方法: 控制台结果: 需求分析: 首先确定new调用的this和什么对象绑定,如果跟默认返回的对象绑定肯定做不到 [ ] 这样的访问,所以要在构造器内部返回一个包装过的数组 1.leng ...
- tips 【总结】
需求 移入a标签把对应的详情显示出来并且根据位置判断,当前详情是否超出父级可视区范围,如果超出就定位的距离方向应该正好在父级可视区范围内 需求分析: 需要用到: offsetLeft 获取外边框到 ...
- 给Nginx配置日志格式和调整日期格式
效果对比 官方默认日志格式 # 官方默认日志格式 log_format main '$server_name $remote_addr - $remote_user [$time_local] &qu ...
- 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...
- 【PHP】用了这么久的Laravel框架,你分析过核心架构了没
Laravel最初的设计是为了面向MVC架构的,它可以满足如事件处理.用户身份验证等各种需求.另外它还有一个由管理数据库强力支持,用于管理模块化和可扩展性代码的软件包管理器. Laravel以其简洁. ...
- leetcode 刷题(数组篇)1题 两数之和(哈希表)
题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元 ...
- 使用gradle插件发布项目到nexus中央仓库
目录 简介 Gradle Nexus Publish Plugin历史 插件的使用 Groovy DSL Kotlin DSL 插件背后的故事 总结 简介 Sonatype 提供了一个叫做开源软件资源 ...
- IDEA创建XML文件没有Spring Config选项
我在resources目录下导入3个配置文件时,applicationContext-common.xml文件中有4处http地址红色报错,下图为修正后的图片 了解到可能是由于父工程的pom文件中没有 ...