博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android基础]Android中如何使用Intent传递对象
阅读量:2441 次
发布时间:2019-05-10

本文共 2614 字,大约阅读时间需要 8 分钟。

我们可以借助Intent来启动活动、发送广播、启动服务等,在进行上述操作时,我们还能在Intent中添加一些附加数据,已达传值的效果,比如下面的代码:

MainActivity

Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("name", "xiaoming");intent.putExtra("age", 17);startActivity(intent);

SecondActivity可以得到这些值:

getIntent().getStringExtra("name");getIntent().getIntExtra("age", 0);

这里只是利用Intent传递一些值,如何传递对象呢?

有两种方式,一种是Serializable方式,另一种是Parcelable方式。

Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化方法很简单,只需要让一个类去实现Serializable这个接口就可以了。

比如一个Animal类,其中包含了type,sex这两个字段,代码如下:

public class Animal implements Serializable{
private String type; private String sex; public String getType() { return type; } public void setType(String type) { this.type = type; } public Stirng getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}

MainActivty.java

Animal animal = new Animal();animal.setType("panda");animal.setSex("male");Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent,putExtra("animal_panda", animal);startActivity(intent);

SecondActivity.java

Animal animal = (Animal)getIntent().getSerializableExtra(animal_panda);

这里调用了getSerializableExtra()方法获取通过参数传递过来的序列化对象,接着再将它向下转型成Person对下岗,这样我们就成功实现了使用Intent来传递对象的功能了。

除了Serializable之外,使用Parcelable也可以实现相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样就实现传递对象的功能了。

public class Animal implements Serializable{
private String type; private String sex; public String getType() { return type; } public void setType(String type) { this.type = type; } public Stirng getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(type); dest.writeString(sex); } public static final Parcelable.Creator
CREATOR = new Parcelable.Creator
() { @Override public Animal createFromParcel(Parcel source) { Animal animal = new Animal(); animal.type = source.readStirng(); animal.sex = source.readString(); return animal; } @Override public Aniaml[] newArray(int size) { return new Animal[size]; } }}

SecondActivity.java

Animal animal = (Animal)getIntent.getParcelableExtra(animal-panda);

存在即理由,Parcelable方式虽然复杂,但效率更高,一般推荐使用Parcelable方式来实现Intent传递的功能。

转载地址:http://aefqb.baihongyu.com/

你可能感兴趣的文章
基础存储知识
查看>>
PostgreSQL 源码解读(37)- 查询语句#22(查询优化-grouping_plan...
查看>>
PostgreSQL 源码解读(44)- 查询语句#29(等价类相关数据结构)
查看>>
PostgreSQL 源码解读(48)- 查询语句#33(query_planner函数#9)
查看>>
PostgreSQL 源码解读(45)- 查询语句#30(query_planner函数#6)
查看>>
PostgreSQL 源码解读(47)- 查询语句#32(query_planner函数#8)
查看>>
PostgreSQL 源码解读(17)- 查询语句#2(查询优化基础)
查看>>
Windows Vista内置趣味实用工具大搜罗(转)
查看>>
FreeBSD安装文件系统(转)
查看>>
最简单FreeBSD网关方案(转)
查看>>
Windows 98 多用户的管理(转)
查看>>
更改Windows XP 的日期和时间(转)
查看>>
windows2000中的“秘密武器”(三)(转)
查看>>
Linux程序应用开发环境和工具经验谈(转)
查看>>
Linux办公一条龙之电子表格Calc(转)
查看>>
在NETBSD上配置ADSL+IPF+IPNAT(转)
查看>>
Windows 98 使用维护向导(转)
查看>>
用win2000收发传真(转)
查看>>
Linux办公一条龙之初识OpenOffice(转)
查看>>
Linux上安装GCC编译器过程(转)
查看>>