今天 在两个Activity之间传集合类型数据,看了一下,要用Parcelable 所以就看一下东西:

下面一段话是复制网友的。

Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。下面就介绍一下实现Parcelable接口的方法 
        通过实现Parcelable接口序列化对象的步骤: 
        1、声明实现接口Parcelable 
        2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象 
        3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:

package com.hct.demo;

import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log; /**
*
* @time 2013-11-26 下午4:12:46
* @todo person实体类,实现Parcelable接口类
*/ public class Person implements Parcelable {
private static final String TAG = ParcelableTest.TAG; private int age;
private String name; public Person(){} public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} /**
* 3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:Java代码 收藏代码
public static final Parcelable.Creator<T> CREATOR 其中public static final一个都不能少
,内部对象CREATOR的名称也不能改变,必须全部大写。
4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象 简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象
。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象
,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
*/
public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Log.d(TAG, "createFromParcel");
Person mPerson = new Person();
mPerson.name = source.readString();
mPerson.age = source.readInt();
return mPerson;
} @Override
public Person[] newArray(int size) {
return new Person[size];
}
}; @Override
public int describeContents() {
Log.d(TAG, "describeContents");
return 0;
} /**
* 实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
Log.d(TAG, "writeToParcel");
dest.writeString(name);
dest.writeInt(age);
}
}
package com.hct.demo;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class ParcelableTest extends Activity implements OnClickListener {
public static final String KEY = "key";
private Button button;
public static final String TAG = "Parcelable"; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
Log.d(TAG, "ParcelableTest");
} private void init() {
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
} private void fun() {
Log.d(TAG, "fun");
Person mPerson = new Person();
mPerson.setName("tom");
mPerson.setAge(25);
Intent mIntent = new Intent(this,ParcelableTest2.class);
Bundle mBundle = new Bundle();
mBundle.putParcelable(KEY, mPerson);
mIntent.putExtras(mBundle);
startActivity(mIntent);
} private void funList(){
ArrayList<Person> list = new ArrayList<Person>();
for(int i = 0;i<5;i++){
Person mPerson = new Person("abc"+i,i*5);
list.add(mPerson);
}
Intent mIntent = new Intent(this,ParcelableTest2.class);
mIntent.putParcelableArrayListExtra(KEY, list);
startActivity(mIntent);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
funList();
break; default:
break;
}
}
}
package com.hct.demo;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView; public class ParcelableTest2 extends Activity {
private static final String TAG = ParcelableTest.TAG; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, "ParcelableTest2");
TextView textView = new TextView(this);
// Person mPerson = (Person) getIntent().getParcelableExtra(ParcelableTest.KEY); ArrayList<Person> arrays = getIntent().getParcelableArrayListExtra(ParcelableTest.KEY);
StringBuilder sb = new StringBuilder();
for(int i=0;i<arrays.size();i++){
Person mPerson = arrays.get(i);
sb.append("name = " + mPerson.getName() + " age = " + mPerson.getAge()).append("\n");
} textView.setText(sb.toString()); setContentView(textView);
}
}

结果打出来了

Android中使用Parcelable的更多相关文章

  1. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  2. android中实现Parcelable序列化步骤

    import java.io.Serializable; import java.text.DecimalFormat; import android.os.Parcel; import androi ...

  3. Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

    http://blog.csdn.net/cjjky/article/details/6441104 在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSeri ...

  4. Android 中的AIDL,Parcelable和远程服务

    Android 中的AIDL,Parcelable和远程服务      早期在学习期间便接触到AIDL,当时对此的运用也是一撇而过.只到近日在项目中接触到AIDL,才开始仔细深入.AIDL的作用    ...

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

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

  6. 【转】Android中如何使用Bundle传递对象[使用Serializable或者Parcelable] -- 不错

    原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1211/694.html Android中Bundle类的作用 Bun ...

  7. Android中Parcelable序列化总结

    在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...

  8. Android中Parcelable接口

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  9. 浅谈Android中Serializable和Parcelable使用区别

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.概述 Android开发的时候,我们时长遇到传递对象的需求,但是我们无法将对象的引用传给Activity或者Fragment,我们需要将这些对象 ...

随机推荐

  1. C#转换日期类型

    日期1999-5-31 11:20转换成 /Date(928120800000+0800)/ 其中928120800000实际上是一个1970 年 1 月 1 日 00:00:00至这个DateTim ...

  2. 【CocoaPods】CocoaPods基本安装教程

    CocoaPods是什么,有什么用,怎么来等等我就不说了.反正就是一个管理第三方开源框架的~ 1. 配置前 - 本地安装好Ruby环境 2. 安装命令 -> sudo gem install c ...

  3. Eclipse启动的时候窗口一闪就关的解决办法(转)

    有时候会碰到如题这种问题,从网上查知解决办法,非常管用 为eclipse.exe创建一个快捷方式,然后快捷方式上右键-属性,在目标栏填入 E:\eclipse\eclipse.exe -vm &quo ...

  4. c++ uuid生成法则

    http://www.jb51.net/LINUXjishu/39614.html CentOS #include <uuid/uuid.h> 找不到文件解决方法: sudo yum in ...

  5. dede首页调用栏目内容{dedefield.content}的方法

    Dedecms的功能确实很强大,但是dedecms的全局变量有字节限制,使得我们在使用dedecms制作企业站的时候,首页无法调用大段大段的企业站. 其实dedecms还有另外一种调用大段内容的方法, ...

  6. 2012 Asia Hangzhou Regional Contest

    Friend Chains http://acm.hdu.edu.cn/showproblem.php?pid=4460 图的最远两点距离,任意选个点bfs,如果有不能到的点直接-1.然后对于所有距离 ...

  7. PAT-乙级-1050. 螺旋矩阵(25)

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  8. 高性能网络编程2----TCP消息的发送

    转 陶辉 taohui.org.cn 在上一篇中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字.操作TCP协议发送数据时,面对的是数据流.通常调用诸如send或者write方法来发送数据 ...

  9. PHP之XML节点追加操作讲解

    问题: 最近研究了xml,我想知道,如何用php向已有的xml文档中添加新的节点,比如,xml文档内容如下,并保存为information.xml: <?xml version="1. ...

  10. 将LINUX变成路由器

    将LINUX变成路由器 2009-06-04 22:38:45 标签:LINUX 路由器 休闲 职场 版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任.     LINUX系统是一个强大 ...