activity间传递参数
传递值对象
值对象可以理解为自定义的数据类型对象。
为了完成这个知识点的讲解,先来创建一个User类型的类,它有name和age两个属性,然后请添加getter/setter方法,构造方法等基本方法。
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
现在在第一个activity即FirstActivity中,在进行activity跳转代码的地方修改成如下代码
Intent i=new Intent(FirstActivity.this,TwoActivity.class);
i.putExtra("data",new User("miao",20));//这里会有红线,有错误。
startActivity(i);
此时代码会显示有错误,点击错误的提示信息,会看到如下的解决方案

现在我们先选择第二种方式来解决它。
先让User类实现Serializable接口。在类的后面写上implements Serializable,其它的都不需要改变。
public class User implements Serializable{
......
}
此时之前的错误已经没有了。现在在接收数据的activity界面代码即TwoActivity中添加如下代码
//获取传入的Intent
Intent i=getIntent();
User user=(User) i.getSerializableExtra("data");
现在从FirstActivity传过来的数据已经传到了TwoActivity中的user对象上了,你可以调用user对象的相关方法来获取其属性的值了,去试试吧!让数据显示在你想要显示的地方。
这种方法用起来是不是很简单,简单的同时当然这是要付出的点代价的,速度有点慢。
下面我们来换种方式来解决问题吧!
User类实现Parcelable接口,这里需要实现两个方法,再自己添加一个属性。
public class User implements Parcelable{
......
@Override
public int describeContents() {
return 0;
}
//序列化数据,系统自动执行
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeInt(getAge());
}
public static final Creator<User> CREATOR=new Creator<User>() {
//通过一个Parcel对象创建对象
@Override
public User createFromParcel(Parcel source) {
return new User(source.readString(),source.readInt());
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
}
以上是传递一个String类型的数据,那如果要传递多个String类型的数据那该怎么办呢?可以将数据打包到Bundle对象上,此时可以用如下的方法展开,这里就不多言了,感兴趣的可自己试试!
Parcel.writeBundle(Bundle val)
Parcel.readBundle()
以上改完之后,在接收数据的代码改动一下
Intent i=getIntent();
User user=i.getParcelableExtra("data");
好了,此时user已经成功接收FirstActivity发送过来的名字为data的User对象了。大家可以调用相关的方法来获取传过来的信息了。
两种方法已经介绍完毕,现在来具体讲讲两种方式的优缺点。
- 通过实现Serializable接口实现值传递,操作简单,序列化操作是由系统完成的,速度较慢。
- 通过实现Parcelable接口实现值传递,操作复杂,因为要自己手动编写代码实现,速度较快。
以上的知识是自己看相关教程后将所得到的认知,转换为了文字供大家一起学习参考。
activity间传递参数的更多相关文章
- 第一课android开发之在activity间传递参数
一.活动间简单参数传递:1.在布局中添加按钮,用<Button,用id设置id名称,id="@+id/这儿填写你要设置成的名称":用text设置按钮上显示的文字.text=& ...
- 使用Bundle在Activity间传递数据
使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...
- jsp页面间传递参数 中文乱码问题(zz)
jsp页面间传递参数 中文乱码问题 1.传递参数 var url = "*****Test.jsp?param1="+encodeURI(encodeURI(str));//对 ...
- ios页面间传递参数四种方式
ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...
- JSP页面间传递参数的5种方法
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)
一.函数声明和表达式 函数声明: function test() {}; test(); //运行正常 function test() {}; 函数表达式: var test = functio ...
- WPF 进程间传递参数
WPF 进程间传递参数 在软件开发中有时需要在一个软件中启动另一个软件,这时用Process.Start(“软件路径”)可以启动另一个软件.如果在这个过程中还需要传递一些参数给新启动 ...
- jsp 页面间传递参数
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...
- Activity之间传递参数(四)
--------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...
随机推荐
- HDU 5493 Queue
Queue Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- SQL to MongoDB Mapping Chart
http://docs.mongodb.org/manual/reference/sql-comparison/ In addition to the charts that follow, you ...
- [K/3Cloud]关于K/3 Cloud v2.0升级补丁的疑问
现在除了K/3 Cloud v2.0的正式版之外,后续又发布了SP1和SP2补丁包.改善了一些问题和BUG,有些人之前可能之前装了SP1,有的可能没装过.在这里我说明一下: 不管装没装过补丁直接打SP ...
- Switch Game
Problem Description There are many lamps in a line. All of them are off at first. A series of operat ...
- Maven奇怪的问题,当找不到Maven输出的提示错误时可以试下这个方法
Maven有时会输出一些奇怪的错误,尤其是用Eclipse自动下载的包,然后根据提示的错误在网上找不到时,可以试下直接删除.m2文件夹,即本地仓库.然后再重新在控制台下执行打包命令来下载包.
- Jenkins+Github持续集成
由于最近团队代码库从coding迁移到github,在CI工具的选型上尝试了travis-ci和circle-ci,最后决定自己搭建CI服务器,而我也有幸认领了这个任务的调研,因此有了这篇文章. 之前 ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- 写给小白的JVM学习指南
Java 虚拟机是学习 Java 的基础,也是迈入高级 Java 开发工程师的必备知识点.所以今天这篇文章我们来聊聊如何从零开始学习 Java 虚拟机. 基础 对于刚刚接触 JVM 的同学来说,JVM ...
- 使用引导扇区维护工具BOOTICE编辑系统启动列表BCD文件
使用引导扇区维护工具BOOTICE编辑系统启动列表BCD文件 系列文章: 笔记本电脑提速之加装内存条.SSD固态硬盘.光驱位换SSD固态硬盘 笔记本ThinkPad E430c加装内存和SSD固态硬盘 ...
- LeetCode 819. Most Common Word (最常见的单词)
Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...