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

时间: 2024-09-22 16:02:39

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

Android开发实现的Intent跳转工具类实例

本文实例讲述了Android开发实现的Intent跳转工具类.分享给大家供大家参考,具体如下: 一.概述 Intent的中文意思是"意图,意向",在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之

Android编程下拉菜单spinner用法小结(附2则示例)_Android

本文较为详细的总结分析了Android编程下拉菜单spinner用法.分享给大家供大家参考,具体如下: Spinner控件也是一种列表类型的控件,它的继承关系如下: java.lang.Object    ↳ android.view.View      ↳ android.view.ViewGroup        ↳ android.widget.AdapterView<Textends android.widget.Adapter>          ↳ android.widget.A

Android编程下拉菜单spinner用法小结(附2则示例)

本文较为详细的总结分析了Android编程下拉菜单spinner用法.分享给大家供大家参考,具体如下: Spinner控件也是一种列表类型的控件,它的继承关系如下: java.lang.Object    ↳ android.view.View      ↳ android.view.ViewGroup        ↳ android.widget.AdapterView<Textends android.widget.Adapter>          ↳ android.widget.A

Android编程仿Iphone拖动相片特效Gallery的简单应用示例_Android

本文实例讲述了Android编程仿Iphone拖动相片特效Gallery的简单应用.分享给大家供大家参考,具体如下: Step 1:准备图片素材. 将icon2,icon3,icon4,icon5,icon6五张图片导入res/drawable里加上icon.png本身一共有6张图片. Step 2:新建Android工程,命名为GalleryDemo. Step 3:设计UI,修改main.xml代码如下: <?xml version="1.0" encoding="

Android编程实现通讯录中联系人的读取,查询,添加功能示例

本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能.分享给大家供大家参考,具体如下: 先加二个读和写权限: <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 具体代码: package com.ebo

Android编程自定义Notification实例分析_Android

本文实例讲述了Android编程自定义Notification的用法.分享给大家供大家参考,具体如下: Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notification对移动设备来说是最适合不过的了.用户可能随时都带着手机在身边.一般来说,用户会在后台打开几个程序,但不会注意它们.在这样的情形下,当发生需要注意的事件时,能够通知用户是很重要的. Noti

Android编程实现自定义手势的方法详解_Android

本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何对其进行管理. 先介绍一下Android系统对手势的管理,Android系统允许应用程序把用户的手势以文件的形式保存以前,以后要使用这些手势只需要加载这个手势库文件即可,同时Android系统还提供了诸如手势识别.查找及删除等的函数接口,具体如下: 一.加载手势库文件: staticGestureL

Android编程经典代码集锦(复制,粘贴,浏览器调用,Toast显示,自定义Dialog等)_Android

本文实例总结了Android编程经典代码段.分享给大家供大家参考,具体如下: 1. 复制,粘贴 clip = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); clip.setText("copy"); // 复制 clip.getText(); // 粘贴 2.调用浏览器 核心代码如下: Intent intent = new Intent(); intent.setAction("android.

Android编程之自定义锁屏实例分析_Android

本文实例讲述了Android编程之自定义锁屏.分享给大家供大家参考,具体如下: 花了半天时间研究下了自定义锁屏,发现其实实现并不是很神秘.不过有些地方还是值得注意. 首先说流程,锁屏界面一般是在关闭屏幕时启用,打开屏幕时展现在我们面前,所以我们知道了锁屏的时机,恰好屏幕开关会发出相应的广播,所以我们也可以像系统一样捕获到屏幕开关的事件. 广播对应的两个action 引用 android.intent.action.SCREEN_ON android.intent.action.SCREEN_OF