使用Intent传递对象

来源:互联网 发布:v板htcm8刷通网络 编辑:程序博客网 时间:2024/05/22 18:44

Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActivity 中添加如下代码:

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);      intent.putExtra("string_data", "hello");      intent.putExtra("int_data", 100);      startActivity(intent);  
这里调用了Intent 的putExtra()方法来添加要传递的数据,之后在SecondActivity 中就可以得到这些值了,代码如下所示:

    getIntent().getStringExtra("string_data");      getIntent().getIntExtra("int_data", 0);  

但是不知道你有没有发现,putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都会支持,但是当你想去传递一些自定义对象的时候就会发现无从下手。不用担心,下面我们就学习一下使用Intent 来传递对象的技巧。

传递对象有两种方式:1、Serializable 方式;2、Parcelable。由于第一种很简单,这里只介绍第一种方式。

使用Intent 来传递对象通常有两种实现方式,Serializable 和Parcelable,我们先来学习一下第一种的实现方式。
Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable 这个接口就可以了。
比如说有一个Person 类,其中包含了name 和age 这两个字段,想要将它序列化就可以这样写:

public class Person implements Serializable{  private String name;  private int 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;      }  } 

其中get、set 方法都是用于赋值和读取字段数据的,最重要的部分是在第一行。这里让Person 类去实现了Serializable 接口,这样所有的Person 对象就都是可序列化的了。
接下来在FirstActivity 中的写法非常简单:

    Person person = new Person();      person.setName("Tom");      person.setAge(20);      Intent intent = new Intent(FirstActivity.this, SecondActivity.class);      intent.putExtra("person_data", person);      startActivity(intent);  

可以看到,这里我们创建了一个Person 的实例,然后就直接将它传入到putExtra()方法中了。由于Person 类实现了Serializable 接口,所以才可以这样写。
接下来在SecondActivity 中获取这个对象也很简单,写法如下:
    Person person = (Person) getIntent().getSerializableExtra("person_data");  

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

3 0
原创粉丝点击