向下一个Activity对象传递数据
场景:用户从activity1跳转到activity2,并将activity1的数据传递给activity2中。主要步骤如下:
- 在Intent对象中添加要传递的参数;
startActivity(Intent)
方式启动Activity对象;- 在被启动的Activity对象中通过Intent对象获取数据。
分解步骤如下:
1.在Intent对象中添加数据
Intent简介
在 Android 中,不同的 Activity 实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在 Activity 之间传递消息。Android 中通过 Intent 对象来表示一个意图,一个 Intent 对象不仅包含有这个意图的目的地,还可以包含意图的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,意图“目的地”是必须的,而内容则是可选项。具体详情请见我的另一篇1。
添加数据
Intent对象可以添加八大基本数据类型,String,CharSequence及对应的数组,也可以添加Bundle对象,Serializable实例,Parcelable实例。Serializable和Parcelable可用于实现传递自定义对象类型。
下面具体以代码演示如何传递不同的数据类型。
传递非对象数据
使用Intent传递数据包括以下两种:
- 传递Bundle对象
Bundle维护了一个HashMap<String,Object>
对象,将我们的数据存在 HashMap 中来进行传递; - 直接传递键值对
这种方式也是通过Bundle传递,只是Bundle由系统管理.
这两种实现代码如下:
/**
* 第一种方式:传递Bundle对象
*/
Bundle bundle = new Bundle();
//名字,值
bundle.putString("name","sywyg");
bundle.putInt("age",26);
intent.putExtra("person",bundle);
/**
* 第二种方式:直接传递键值对
* 内部也是通过Bundle实现的
*/
intent.putExtra("sex","男");
传递对象
包括以下两种方法
Serializable序列化方式
Serializable读作[sɪərɪəlaɪ’zəbl],表示序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上传输,也可以存储在本地。只要将准备序列化的对象实现Serializable接口即可,例如要实现对Cat的序列化,代码如下:
package com.sywyg.activity_test;
import java.io.Serializable;
/**
* Created by sywyg on 2015/4/21.
*/
public class Cat implements Serializable{
//为了方便描述就不封装了
String name;
int age;
@Override
public String toString() {
return "Cat[name:" + name + "age:" + age + "]";
}
}
上述代码完成了对Cat类的序列化。下面在MainActivity(第一个Activity)中设置传送Cat类对象到MainActivity2(第二个Activity)中,主要代码如下:
/**
* 通过Serializable接口传递对象
*/
Cat cat = new Cat();
cat.name = "小猫";
cat.age = 3;
//参数为:对象名,Serializable引用变量
intent.putExtra("cat",cat);
接下来在MainActivity2中获取对象的主要代码如下:
//getIntent()返回Intent对象
Cat cat = (Cat)getInt