Intent传递对象的两种方法
Android为intent提供了两种传递对象参数类型的方法
分别需要使实体类实现Serializable接口、Parcelable接口
首先我们要知道,传递对象,需要先将对象序列化
一、那么为什么要对象序列化
1、永久性保存对象,保存对象的字节序列到本地文件中;
2、用过序列化对象在网络中、进程间传递对象;
二、序列化对象什么时候实现Serializable接口,什么时候实现Parcelable接口接口
1、Parcelable不能使用将数据存储在磁盘上,因为Parcelable在外界有变化的情况下不能很好的保存数据的持续性。
因此在这种情况下,建议使用Serializable
2、在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable类。
并且Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
----------------------------------------------------------------------------------------------------------
下面看下两种传递对象方式的使用方法
一、实体类继承Serializable接口的方式
1、第一步,将我们需要传送的对象所属的实体类实现Serializable接口
package com.xqx.IntentDemo; import java.io.Serializable; /**
* People实体类,含有 name,sex,age三个属性 ,并实现类的封装
*/
public class People implements Serializable {
private String name;
private String sex;
private int age; public String getName() {
return name;
} public String getSex() {
return sex;
} public int getAge() {
return age;
} public void setName(String name) {
this.name = name;
} public void setSex(String sex) {
this.sex = sex;
} public void setAge(int age) {
this.age = age;
}
}
2、传递数据步骤
//创建Intent对象
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
//创建实体类
People people = new People();
people.setName("Mark");
people.setSex("boy");
people.setAge();
//添加传送数据
intent.putExtra("people", people);
startActivity(intent);
3、接收数据
Intent intent = getIntent();
People people = (People) intent.getSerializableExtra("people");
Log.i("DATA_SHOW","name-->"+people.getName()+",sex-->"+people.getSex()+",age-->"+people.getAge());
4、Log打印
-/? I/DATA_SHOW﹕ name-->Mark,sex-->boy,age-->
二、实体类继承Parcelable接口的方式
1、实体类实现Parcelable接口
public class Student implements Parcelable {}
重写接口的两个方法
@Override
public int describeContents() {
return ;
}
// 将对象的需要传递的属性 以 Parcel parcel.writXxx的形式写出,具体看属性的类型
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(sex);
parcel.writeInt(age);
}
添加一个常量CREATOR(名字大小必须固定),该常量必须实现Parcelable的内部接口:Parcelable.Creator,并实现该接口中的两个方法
public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() { @Override
public Student createFromParcel(Parcel source) {
Student student = new Student();
student.name = source.readString();
student.sex = source.readString();
student.age = source.readInt();
return student;
} @Override
public Student[] newArray(int size) {
return new Student[size];
}
};
2、传递数据
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
Student student = new Student();
student.setName("Alice");
student.setSex("girl");
student.setAge();
intent.putExtra("student",student);
startActivity(intent);
3、接收数据
Intent intent = getIntent();
Student student = intent.getParcelableExtra("student");
Log.i("DATA_SHOW","name-->"+student.getName()+",sex-->"+student.getSex()+",age-->"+student.getAge());
4、Log日志
-/? I/DATA_SHOW﹕ name-->Alice,sex-->girl,age-->
Intent传递对象的两种方法的更多相关文章
- Intent传递对象的两种方法(Serializable,Parcelable) (转)
今天讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcela ...
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...
- [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)
http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
[转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...
- Intent传递对象的几种方式
原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/51105060 李济洲的博客 Intent的使用方法相信你已经比較熟悉了,Inte ...
- 读取xml文件转成List<T>对象的两种方法(附源码)
读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...
- 取xml文件转成List<T>对象的两种方法
读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最 ...
- 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)
Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...
- WCF生成客户端代理对象的两种方法的解释
最近在封装WCF,有一些很好的实践就记录下来,大家可以放心使用,所有代码都已经调试过.如果有高手可以大家探讨一下. 在WCF中有两种不同的方法可以用于创建客户端服务对象,他们分别为: 1. 代理构造法 ...
随机推荐
- zepto - scrollLeft
<div style="border:1px solid black;width:100px;height:130px;overflow:auto"> The long ...
- 从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)
一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...
- 一款 .NET 下的轻量级 REST 和 HTTP API 客户端 - RestSharp
项目地址:https://github.com/restsharp/RestSharp Features Supports .NET 3.5+, Silverlight 4, Windows Phon ...
- java io系列06之 序列化总结(Serializable 和 Externalizable)
本章,我们对序列化进行深入的学习和探讨.学习内容,包括序列化的作用.用途.用法,以及对实现序列化的2种方式Serializable和Externalizable的深入研究. 转载请注明出处:http: ...
- Reinforcement Learning
Q-learning 高潮博文 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 模式识别与机器学习的区别. http://www. ...
- 创意欣赏:20幅字体排版(Typography)素描
通常我们都只关注最终的作品,但其实幕后还有很多的过程,其中一个是素描.素描用来表达最初思想观念的原型.有时客户需要一个独特的品牌新LOGO或字体,这时先绘制在纸上是比较方便的,之后扫描到 Photos ...
- 关于JQUERY操作XML问题!
使用JQUERY操作XML方法: 1.$.get(”xml文件路径",function(data){}); 2.$.Post(”xml文件路径",function(data){}) ...
- sprint3(第二天)
今天完成的任务有统计用户,全局管理员可以对员工或者用户设置权限. 燃尽图
- github生成燃尽图
一. 前期准备工作. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8添加标签 二. 修改进度 2.1进入milestone,编辑 可以看到上面有bug标签,进入并解决 ...
- Azure开发者任务之一:解决Azure Storage Emulator初始化失败
初学Windows Azure: 我打算开始学习Windows Azure.我安装了Azure SDK,然后在“Cloud”标签下选择Windows Azure模板,创建了一个项目,然后又创建了一个W ...