原文网址:http://blog.csdn.net/lixiang0522/article/details/8642202

android中的组件间传递的对象一般实现Parcelable接口,当然也可以使用java的Serializable接口,前者是android专门设计的,效率更高,下面我们就来实现一个Parcelabel。
 
1. 创建一个类实现Parcelable接口,具体实现如下:
  1. package com.hebaijun.testparcelable;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. public class ParcelableData implements Parcelable{
  5. private String name;
  6. private int age;
  7. public ParcelableData(){
  8. name = "guest";
  9. age = 20;
  10. }
  11. public ParcelableData(Parcel in){
  12. //顺序要和writeToParcel写的顺序一样
  13. name = in.readString();
  14. age = in.readInt();
  15. }
  16. public String getName(){
  17. return name;
  18. }
  19. public void setName(String name){
  20. this.name = name;
  21. }
  22. public int getAge(){
  23. return age;
  24. }
  25. public void setAge(int age) {
  26. this.age = age;
  27. }
  28. @Override
  29. public int describeContents() {
  30. // TODO Auto-generated method stub
  31. return 0;
  32. }
  33. @Override
  34. public void writeToParcel(Parcel dest, int flags) {
  35. // TODO Auto-generated method stub
  36. dest.writeString(name);
  37. dest.writeInt(age);
  38. }
  39. public static final Parcelable.Creator<ParcelableData> CREATOR = new Parcelable.Creator<ParcelableData>() {
  40. public ParcelableData createFromParcel(Parcel in) {
  41. return new ParcelableData(in);
  42. }
  43. public ParcelableData[] newArray(int size) {
  44. return new ParcelableData[size];
  45. }
  46. };
  47. }
2. 通过下面的方法发送对象。Bundle类也实现了Parcelable接口,一般在android中我们是通过Bundle来封装数据并进行传送的。
  1. Intent intent = new Intent();
  2. intent.setClass(this, SubActivity.class);
  3. // 直接添加
  4. //intent.putExtra("MyData", new ParcelableData());
  5. // 通过Bundle
  6. Bundle bundle = new Bundle();
  7. bundle.putString("MyString", "test bundle");
  8. bundle.putParcelable("MyData", new ParcelableData());
  9. intent.putExtras(bundle);
  10. startActivity(intent);
3. 下面的接收对象的方法。
  1. //ParcelableData parcelableData = getIntent().getParcelableExtra("MyData");
  2. Bundle bundle = getIntent().getExtras();
  3. ParcelableData parcelableData = bundle.getParcelable("MyData");
  4. String testBundleString = bundle.getString("MyString");
  5. Log.v("string=", testBundleString);
  6. Log.v("name=", parcelableData.getName());
  7. Log.v("age=", ""+parcelableData.getAge());

传输的对象需要实现序列化:有两种方式,一种是实现Serializable接口,就是原来的java方式;另外一种是android的Parcelable方式,这个性能可能好一些,我猜的,但是这在需要手动去写Parcelable接口的实现。

Serializable存数据:

  1. Person mPerson = new Person();
  2. mPerson.setName("frankie");
  3. mPerson.setAge(25);
  4. Intent mIntent = new Intent(this,ObjectTranDemo1.class);
  5. Bundle mBundle = new Bundle();
  6. mBundle.putSerializable(SER_KEY,mPerson);
  7. mIntent.putExtras(mBundle);

Serializable取数据:

 // 获取启动该ResultActivity的Intent
24         Intent intent = getIntent();
25         // 获取该Intent所携带的数据
26         Bundle bundle = intent.getExtras();
27         // 从bundle数据包中取出数据
28         Person person = (Person) bundle.getSerializable("person");

Parcelable存数据:

  1. Intent mIntent = new Intent(this,ObjectTranDemo2.class);
  2. Bundle mBundle = new Bundle();
  3. mBundle.putParcelable(PAR_KEY, mBook);
  4. mIntent.putExtras(mBundle);

Parcelable取数据:

  1. Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);

参考1:http://blog.csdn.net/Android_Tutor/article/details/5740845

参考2:http://my.oschina.net/u/577632/blog/76906

【转】Android中intent传递对象和Bundle的用法的更多相关文章

  1. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  2. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

    http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...

  3. Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

    [转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...

  4. android#使用Intent传递对象

    参考自<第一行代码>——郭霖 Intent的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent中添加一些附加数据,以达 ...

  5. Android中Intent传递类对象的方法一(Serializable)

    Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...

  6. Android通过Intent传递对象

    1.传递Serializable方式类对象 首先创建一个序列化类:User import java.io.Serializable; public class User implements Seri ...

  7. Intent传递对象的几种方式

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/51105060 李济洲的博客 Intent的使用方法相信你已经比較熟悉了,Inte ...

  8. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

  9. Android 通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

随机推荐

  1. TCP调试助手

    网络开发经常要用到一些TCP&UDP的调试工具,搜集一些备用. 目前总结工具有(不分先后): chrome等自带调试器调试HTTP Fiddler(.NET)和Charles debugger ...

  2. 学习笔记6_Java_day11_JSP_基础和入门(1、2)

    主要内容:1. JSP基础2. Cookie3. HttpSession ================================ JSP基础 1. jsp的作用: * Servlet: &g ...

  3. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  4. OC-手动内存管理

    一.为什么要进行内存管理 •移动设备的内存极其有限,每个app所能占用的内存是有限制的 • •下列行为都会增加一个app的内存占用 Ø创建一个OC对象 Ø定义一个变量 Ø调用一个函数或者方法 • •当 ...

  5. javascript闭包的理解

    闭包是Javascript的一个难点,但也是一个很重要的知识点. 1.首先我们要知道变量作用域链 变量的作用域分两种:全局变量和局部变量.没有定义到任何函数中的变量为全局变量,在函数中定义的变量为局部 ...

  6. java之sleep、wait、yield、join、notify乱解

    ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是 ...

  7. 【培训】Linux笔记 自学

    1.关机 查看在线用户 who:查看网络联机状态 netstat -a:查看后台执行程序 ps -aux 关机 shutdown -h now.init 0 halt.poweroff 硬件关机 重启 ...

  8. Codevs 4600 [NOI2015]程序自动分析

    4600 [NOI2015]程序自动分析 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 在实现程序自动分析的过程中,常常需 ...

  9. PAT_1016 部分A+B

    问题描述: 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6. 现给定A.DA.B ...

  10. PHP CURL参数详解

    curl用法:cookie及post 一.cookie用法 <?php $cookie_jar = tempnam('./tmp','cookie'); // login $c=curl_ini ...