在开发中不少要用到Activity直接传输对象,下面我们来看看,其实跟java里面差不多
   自定义对象的传递:通过intent传递自定义对象的方法有两个
  第一是实现Serialization接口;
  第二是实现Parcelable接口;

下面来看个例子:

package com.example.bean;

 import java.io.Serializable;

 public class Bed implements Serializable {

  private String name;
private int number; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} @Override
public String toString() {
return "Name:" + getName() + ",Number:" + getNumber();
} }
package com.example.bean;

 import android.os.Parcel;
import android.os.Parcelable; public class Patient implements Parcelable { private String name;
private int number; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
} public static final Parcelable.Creator<Patient> CREATOR = new Parcelable.Creator<Patient>() {
public Patient createFromParcel(Parcel p) {
Patient patient = new Patient();
patient.name = p.readString();
patient.number = p.readInt();
return patient;
} public Patient[] newArray(int size) {
return new Patient[size];
}
}; @Override
public int describeContents() {
return ;
} /**
*
*@desc 注:这里的write方法和createFromParcel里的一一对应,不然createFromParcel都是p.readString(),你怎么知道是哪一个
*
*/
@Override
public void writeToParcel(Parcel p, int flags) {
p.writeString(name);
p.writeInt(number);
} @Override
public String toString() {
return "Name:" + getName() + ",Number:" + getNumber();
} }
TestActivity.java:

  StringBuilder sb = new StringBuilder();

  sb.append("Serializable Bed对象\n");

  Bed bed = (Bed) getIntent().getExtras().get("bed");
sb.append(bed.toString()); sb.append("\n\nList<Serializable Bed>集合\n"); List<Bed> listBed = (List<Bed>) getIntent()
.getSerializableExtra("beds");
for (int i = ; i < listBed.size(); i++) {
sb.append(listBed.get(i).toString() + ";");
} sb.append("\n\nParcelable Patient对象\n"); Patient patient = getIntent().getParcelableExtra("patient1");
sb.append(patient.toString()); sb.append("\n\nParcelable Patient byte[]\n"); byte[] data = getIntent().getByteArrayExtra("patient2");
if (data != null) {
Parcel in = Parcel.obtain();
in.unmarshall(data, , data.length);
in.setDataPosition();
patient = Patient.CREATOR.createFromParcel(in);
}
sb.append(patient.toString()); sb.append("\n\nString数组\n"); String[] str = getIntent().getStringArrayExtra("patients");
for (int i = ; i < str.length; i++) {
sb.append(str[i]);
} TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(sb);

android 对象传输及parcel机制的更多相关文章

  1. Android中的Parcel机制 实现Bundle传递对象

    Android中的Parcel机制    实现了Bundle传递对象    使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parc ...

  2. 探索Android中的Parcel机制(上)

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  3. 探索Android该Parcel机制(上)

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象. 主要应用是利用外部存储设备保存对象状 ...

  4. 探索Android该Parcel机制上

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  5. Android中的Parcel机制(上)

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...

  6. android对象序列化Parcelable浅析

    一.android序列化简介 我们已经知道在Android使用Intent/Bindler进行IPC传输数据时,需要将对象进行序列化. JAVA原本已经提供了Serializable接口来实现序列化, ...

  7. 图文详解 Android Binder跨进程通信机制 原理

    图文详解 Android Binder跨进程通信机制 原理 目录 目录 1. Binder到底是什么? 中文即 粘合剂,意思为粘合了两个不同的进程 网上有很多对Binder的定义,但都说不清楚:Bin ...

  8. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  9. 从AIDL开始谈Android进程间Binder通信机制

    转自: http://tech.cnnetsec.com/585.html 本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析. 概述 ...

随机推荐

  1. SharePoint 页面Pages和SitePages目录创建不成功解决

    最近项目中要用到Pages及SitePages目录中的一个 可是目录时,不是发现没有Pages就是没SitePages: 分析后才得知Pages目录需要开户SharePoint Server Publ ...

  2. WPF:保存窗口当前状态截图方法

    在制作软件使用手册或者操作示范市,比较常用方式有截图和视频制作.如果软件内置当前状态的截图和操作视频的导出功能,则将极大简化这方面的工作.使用wpf编写的UI界面,截图的导出功能逻辑相对简单,通用的实 ...

  3. linux管道学习(二)

    int main() { char* pipename = "pipe"; mkfifo(pipename,); int pid = fork(); ) { printf(&quo ...

  4. C++动态分配内存

    动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态 ...

  5. MongoDB源码编译

    MongoDB源码编译 本人编译的版本编译的版本为mongodb2.6分支,目前MongoDB3.0已经发布,编译步骤和2.6的差不多,不过3.0版本要求编译器支持c++11标准,所以如果是在Linu ...

  6. clr介绍

    CLR(公用语言运行时)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离..NET提供了一个运行时环境,叫做公用语言运行时(Comm ...

  7. 《Thinking In Java第四版》拾遗

    <Thinking In Java第四版>拾遗 转自我的github(http://katsurakkkk.github.io/2016/05/Thinking-In-Java%E7%AC ...

  8. Google Map 自定义 infowindow

    最近做的东西用到了infowindow,不过google提供的样式太难看了,于是想改变一下样式.看了一下好像infowindow的样式不太好改. 查了半天资料,看到一个infobox,感觉真的挺好用. ...

  9. 常见排序算法(PHP实现)

    function InsertSort($arr){ $num = count($arr); for($i = 1; $i < $num; $i++){ $key = $arr[$i]; for ...

  10. sass中 混合宏 VS 继承 VS 占位符 各自的使用时机和特点

    初学者都常常纠结于这个问题“什么时候用混合宏,什么时候用继承,什么时候使用占位符?”其实他们各有各的优点与缺点,先来看看他们使用效果: a) Sass 中的混合宏使用 举例代码见 2-24 行 编译出 ...