android 对象传输及parcel机制
在开发中不少要用到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机制的更多相关文章
- Android中的Parcel机制 实现Bundle传递对象
Android中的Parcel机制 实现了Bundle传递对象 使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parc ...
- 探索Android中的Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- 探索Android该Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象. 主要应用是利用外部存储设备保存对象状 ...
- 探索Android该Parcel机制上
一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- Android中的Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态, ...
- android对象序列化Parcelable浅析
一.android序列化简介 我们已经知道在Android使用Intent/Bindler进行IPC传输数据时,需要将对象进行序列化. JAVA原本已经提供了Serializable接口来实现序列化, ...
- 图文详解 Android Binder跨进程通信机制 原理
图文详解 Android Binder跨进程通信机制 原理 目录 目录 1. Binder到底是什么? 中文即 粘合剂,意思为粘合了两个不同的进程 网上有很多对Binder的定义,但都说不清楚:Bin ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- 从AIDL开始谈Android进程间Binder通信机制
转自: http://tech.cnnetsec.com/585.html 本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析. 概述 ...
随机推荐
- UWP入门一 7天酒店客户端源码及说明
以前写过一个wp8的工程,说实话那会的代码很麻烦,写起来费劲,另外还没多少人下载,不过到windows 10 开始微软出了UWP架构以后一切都像以前的winform wpf一样好转起来,新建一个工程以 ...
- 最全的ASP.NET开源CMS汇总
转载:http://www.cnblogs.com/cxd4321/archive/2011/11/16/2250707.html 国内: 1.SiteServer CMS SiteServer CM ...
- jdk在windows中的配置
1.下载jdk(java developer kit),其内部包含jre(java runtime environment): 安装解压缩到一盘内,如:G:\Program Files\Java: 2 ...
- nodejs-日常练习记录-使用express搭建static服务器.
cd C:\wxg\test\node_demo\myapp nvmw use 0.12.1 node static.js var express = require('express'); var ...
- 安装"MySQLdb"一波三折.
在慕课网学习课程"Python操作MySQL数据库",安装"MySQLdb"时遇到问题. 先是找错地方: 百度搜索"Mysql for Python& ...
- 10.13_extjs,combox,效率为什么这么低
(1)今天很累!经过三天的奋斗,终于完成了完全最优界面的快捷选址功能.今天是最后一天,最紧张,也最累. 为何我的效率不高呢?!我的时间都花费到哪儿呢?①阅读代码理解过去的逻辑:②关键技术上的再复习再巩 ...
- IOS 学习笔记 2015-04-15 手势密码(原)
// // WPSignPasswordView.h // 网投网 // // Created by wangtouwang on 15/4/9. // Copyright (c) 2015年 wan ...
- vagrant 设置除默认工项目之外的synced_folder一个坑
vagrant和host共享的目录,模式是以host主机目录为主,vagrant目录为从,所以记住当你新建同步目录的时候一定要先把vagratn目录文件备份一下,不然会被host目录覆盖
- FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多
刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...
- 加密算法 - RSA算法二
RSA算法原理(二) 声明: 本文转自阮一峰 (http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html) 有了这些知识, ...