首页 > 系统 > Android > 正文

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

2019-12-12 02:18:47
字体:
来源:转载
供稿:网友

本文实例讲述了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 InitializationIntent passIntent = new Intent();passIntent.setClass(MainActivity.this, SecondaryActivity.class);// Create custom class ObjectPerson p1 = new Person("Wang", "Zhengyi", "first");Person p2 = new Person("Chen", "Shan", "second");// Create Array List of custom Class and add the Created objectArrayList<Person> aListClass = new ArrayList<Person>();aListClass.add(p1);aListClass.add(p2);// Create a Bundle and Put Bundle in to itBundle bundleObject = new Bundle();bundleObject.putSerializable("key", aListClass);// Put Bundle in to Intent and call start ActivitypassIntent.putExtras(bundleObject);startActivity(passIntent);

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

try{  // Get the Bundle Object  Bundle bundleObject = getIntent().getExtras();    // Get ArrayList Bundle  ArrayList<Person> classObject = (ArrayList<Person>) 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相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表