欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-04 18:41:16
本文实例讲述了android编程实现使用intent传输包含自定义类的arraylist。分享给大家供大家参考,具体如下: 前言 之前项目中通过intent只是传输简单...

本文实例讲述了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<person> alistclass = new arraylist<person>();
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<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程序设计有所帮助。