java intent类,Android编程实现使用Intent传输包含自定义类的ArrayList示例

本文实例讲述了Android编程实现使用Intent传输包含自定义类的ArrayList。分享给大家供大家参考,具体如下:

前言

之前项目中通过Intent只是传输简单的字符串,这次因为需要在前一个页面联网获取对象数据,然后在下一个页面使用,所以考虑到使用Intent传输包含自定义类的ArrayList。

Serializable

Java的对象序列化指的是将那些实现了Serializable接口的对象转换成一个字节序列,并且能在需要的时候再将这个字节序列完全恢复为之前的对象。

想实现对象的序列化,需要实现java.io.Serializable接口(注意,这个接口只是一个标记接口,并没有具体需要override的方法)。当然,你也可以自己实现对象的序列化,但是我认为既然Java提供了这么一套对象序列化的机制,我们最好还是使用官方提供的方法。

Example

创建一个简单对象,并且实现Serializable接口

package javastudy;

import java.io.Serializable;

public class Person implements Serializable {

private static final long serialVersionUID = -6470574927973900913L;

private String firstName;

private String secondName;

// example for transinet

private transient String noSerializableString;

public Person(String firstName, String secondName, String noSerializableString) {

super();

this.firstName = firstName;

this.secondName = secondName;

this.noSerializableString = noSerializableString;

}

public String getFirstName() {

return firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getSecondName() {

return secondName;

}

public void setSecondName(String secondName) {

this.secondName = secondName;

}

public String getNoSerializableString() {

if (noSerializableString != null) {

return noSerializableString;

} else {

return "";

}

}

public void setNoSerializableString(String noSerializableString) {

this.noSerializableString = noSerializableString;

}

public String toString() {

return "Person [ first name :" + getFirstName() + ", second name :" + getSecondName() + ", no serializable :"

+ getNoSerializableString() + "]";

}

}

再写一个类,用于实现对象的序列化和反序列化

package javastudy;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class TestSerializable {

public static void main(String[] args) {

Person person = new Person("Wang", "Zhengyi", "Genius");

String fileName = "/tmp/person.out";

// save object to file

FileOutputStream fos = null;

ObjectOutputStream out = null;

try {

fos = new FileOutputStream(fileName);

out = new ObjectOutputStream(fos);

out.writeObject(person);

out.flush();

} catch (Exception e) {

e.printStackTrace();

} finally {

if (fos != null) {

try {

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (out != null) {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

// read object from file

FileInputStream fin = null;

ObjectInputStream in = null;

try {

fin = new FileInputStream(fileName);

in = new ObjectInputStream(fin);

Person p = (Person) in.readObject();

System.out.println(p);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (fin != null) {

try {

fin.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

Intent传输包含自定义类的ArrayList

之所以之前介绍了Serializable,是因为这是实现Intent传输的前提,ArrayList包含的自定义类必须实现Serializable接口才能通过putSerializable()方法被传递。

还是用上面的Person类作为自定义的类,则第一个传递ArrayList的Activity关键代码如下:

// Intent Creation and Initialization

Intent passIntent = new Intent();

passIntent.setClass(MainActivity.this, SecondaryActivity.class);

// Create custom class Object

Person p1 = new Person("Wang", "Zhengyi", "first");

Person p2 = new Person("Chen", "Shan", "second");

// Create Array List of custom Class and add the Created object

ArrayList aListClass = new ArrayList();

aListClass.add(p1);

aListClass.add(p2);

// Create a Bundle and Put Bundle in to it

Bundle bundleObject = new Bundle();

bundleObject.putSerializable("key", aListClass);

// Put Bundle in to Intent and call start Activity

passIntent.putExtras(bundleObject);

startActivity(passIntent);

第二个接收ArrayList的Activity关键代码如下:

try{

// Get the Bundle Object

Bundle bundleObject = getIntent().getExtras();

// Get ArrayList Bundle

ArrayList classObject = (ArrayList) bundleObject.getSerializable("key");

Retrieve Objects from Bundle

for(int index = 0; index < classObject.size(); index++){

Person person = classObject.get(index);

Toast.makeText(getApplicationContext(), person, Toast.LENGTH_SHORT).show();

}

} catch(Exception e){

e.printStackTrace();

}

希望本文所述对大家Android程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值