传递值对象

值对象可以理解为自定义的数据类型对象。

为了完成这个知识点的讲解,先来创建一个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对象了。大家可以调用相关的方法来获取传过来的信息了。

两种方法已经介绍完毕,现在来具体讲讲两种方式的优缺点。

  1. 通过实现Serializable接口实现值传递,操作简单,序列化操作是由系统完成的,速度较慢。
  2. 通过实现Parcelable接口实现值传递,操作复杂,因为要自己手动编写代码实现,速度较快。

以上的知识是自己看相关教程后将所得到的认知,转换为了文字供大家一起学习参考。

activity间传递参数的更多相关文章

  1. 第一课android开发之在activity间传递参数

    一.活动间简单参数传递:1.在布局中添加按钮,用<Button,用id设置id名称,id="@+id/这儿填写你要设置成的名称":用text设置按钮上显示的文字.text=& ...

  2. 使用Bundle在Activity间传递数据

    使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...

  3. jsp页面间传递参数 中文乱码问题(zz)

      jsp页面间传递参数 中文乱码问题 1.传递参数 var url = "*****Test.jsp?param1="+encodeURI(encodeURI(str));//对 ...

  4. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

  5. JSP页面间传递参数的5种方法

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  6. JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)

    一.函数声明和表达式 函数声明: function test() {}; test();    //运行正常 function test() {}; 函数表达式: var test = functio ...

  7. WPF 进程间传递参数

    WPF 进程间传递参数          在软件开发中有时需要在一个软件中启动另一个软件,这时用Process.Start(“软件路径”)可以启动另一个软件.如果在这个过程中还需要传递一些参数给新启动 ...

  8. jsp 页面间传递参数

    JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数.下面介绍一下实现的方法. (1)直接在URL请求后添加 如:< a href="thexuan.jsp? ...

  9. Activity之间传递参数(四)

    --------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...

随机推荐

  1. codevs——1430 素数判定

    1430 素数判定  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 质数又称素数.指在一个大于1的自然数中, ...

  2. codevs——1675 大质数 2

    1675 大质数 2  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 小明因为没做作业而被数学老师罚站,之 ...

  3. css3 transform对其他样式影响,(尤其是position:flixed)

    1.transform 会为当前元素添加 position : relative 特性: 当 magin 为负值的时候,就会覆盖到前面的 元素, 然而如果给前面元素添加了transform 属性后,前 ...

  4. Mentor.Graphics.FloTHERM.XT.2.3+Mentor.Graphics.Flowmaster.7.9.4

    Mentor.Graphics.FloTHERM.XT.2.3 Mentor.Graphics.Flowmaster.7.9.4 AVL.CRUISE.V2015.0-车辆动力学仿真分析平台 AVL. ...

  5. ubuntu 搭建 svn服务器,使用http方式访问

    原文: http://blog.csdn.net/wobuxingfang/article/details/70835414 参考:http://www.cnblogs.com/zzugyl/p/36 ...

  6. 模板小程序】求小于等于N范围内的质数

    xiaoxi666 联系邮箱: xiaoxi666swap@163.com 博客园 首页 新随笔 联系 订阅 管理 [模板小程序]求小于等于N范围内的质数   1 //筛法求N以内的素数(普通法+优化 ...

  7. python 验证码 高阶验证

    python 验证码 高阶验证 标签: 验证码python 2016-08-19 15:07 1267人阅读 评论(1) 收藏 举报  分类: 其他(33)    目录(?)[+]   字符型图片验证 ...

  8. UVa 10954 Add All(优先队列)

    题意  求把全部数加起来的最小代价  a+b的代价为(a+b) 越先运算的数  要被加的次数越多  所以每次相加的两个数都应该是剩下序列中最小的数  然后结果要放到序列中  也就是优先队列了 #inc ...

  9. LeetCode 443. String Compression (压缩字符串)

    题目标签:String 这一题需要3个pointers: anchor:标记下一个需要存入的char read:找到下一个不同的char write:标记需要存入的位置 让 read指针 去找到下一个 ...

  10. Codeforces Round #272 (Div. 2) Dreamoon and WiFi 暴力

    B. Dreamoon and WiFi Dreamoon is standing at the position 0 on a number line. Drazil is sending a li ...