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<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程序设计有所帮助。