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. 代理构造法 ...
随机推荐
- 类或方法名后加<>
声明类型为泛型. 说明传递的参数为泛型,而不仅仅是一种类型. public void aa<T>(T a) { Console.WriteLine(a); } 调用时可写: this.aa ...
- ruby AES加密解密
最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以 ...
- C#获取类以及类下的方法(用于Asp.Net MVC)
在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection. public ActionResult GetControllerAndAction() List< ...
- 事务复制中的snapshot
Snapshot agent读取article的信息,将article的内容和脚本放置到snapshot文件夹中: 接下来distribution agent会读取这些快照文件,传输到订阅,完 ...
- CentOS下安装JDK7 转载
转载地址:http://www.cnblogs.com/rilley/archive/2012/02/02/2335395.html CentOS下安装JDK7 下载地址:http://www.ora ...
- sql server 随机读取数据
--sql server 随机读取数据 * FROM [tablename] ORDER BY NEWID() pk from [tablename] ORDER BY NEWID()) --这两个方 ...
- JS魔法堂:那些困扰你的DOM集合类型
一.前言 大家先看看下面的js,猜猜结果会怎样吧! 可选答案: ①. 获取id属性值为id的节点元素 ②. 抛namedItem is undefined的异常 var nodes = documen ...
- 才知道百度也提供了智能DNS服务 - 加速乐
http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库,平均只需5秒全球DNS服务器全部生效,百度蜘蛛1秒生效.抗攻击.无限解析记录,免费支持电信.联通. ...
- UGUI之布局的使用
unity的LayoutGroup分为三种, Horizontal Layout Group(水平布局):对象填充总个父物体,水平会填充 Vertical Layout Group(垂直布局):垂直( ...
- ACdream 1214---矩阵连乘
ACdream 1214---矩阵连乘 Problem Description You might have noticed that there is the new fashion among r ...