Andorid学习之路(七)之 Serializable接口和Parcelable接口

Activity之间的数据传输

activity之间的数据传输我们可以通过Intent对象的putExtra方法,通过这个可以传输很多不同类型的数据,比如说字符串、整数、实数、对象等。

首先以一个字符串举例来说一下:

通过putExtra传输字符串可以通过如下方法:

putExtra(String name, String value):intent

第一个参数为用来让接收数据的activity辨别的字符串,相当于HashMap中的索引值。

第二个为要发送的数据(这里是字符串)。

在目标activity中通过这个name来找到这个value。

当前activity中:

String str = "你好";
intent.putExtra("data", str);

目标activity中:

Bundle bundle = getIntent().getExtras();
String str = bundle.getString("data");

上面只是简单的说明一下如何传输字符串。

那么如何传输对象呢?这货比较特殊,不能像putExtra("data", Object)这样进行传输,没有这种方法。

在重载方法中可以找到两个比较特殊的方法:

putExtra(String name, Serializable value):intent

putExtra(String name, Parcelable value):intent

Serializable和Parcelable分别是两个接口,那么要传输对象,则只需要使得类实现这两个接口之一就行了。

我们先来看一下Serializable实现,创建一个类Obj并且实现该接口:

import java.io.Serializable;

public class Obj implements Serializable{
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

当前activity:

Obj obj = new Obj();
obj.setName("李刚");
intent.putExtra("data", obj);

目标activity:

Bundle bundle = getIntent().getExtras();
Obj obj = (Obj) bundle.get("data");
String name = obj.getName();

再来看一下Parcelable实现,创建一个类Obj2并且实现该接口:

import android.os.Parcel;
import android.os.Parcelable;

public class Obj2 implements Parcelable{

	private String name;
	private String age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	/*
	 * 创建CREATOR常量(必须要这样做)
	 * */
	public static Parcelable.Creator<Obj2> CREATOR = new Creator<Obj2>() {

		@Override
		public Obj2[] newArray(int size) {
			return null;
		}

		/*
		 * 重写createFromParcel方法
		 * */
		@Override
		public Obj2 createFromParcel(Parcel source) {
			//通过读取Parcel类对象的属性,来set当前类的属性
			Obj2 obj2 = new Obj2();
			obj2.setName(source.readString());
			obj2.setAge(source.readString());
			return obj2;
		}
	};

	/*将对象属性保存到Parcel类对象中*/
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeString(name);
		dest.writeString(age);
	}
}

看起来是不是要比实现Serializable接口要复杂的多?但是这种方法要好多的,主要是该方法速度快,性能好(一般用这种)。

当前activity:

Obj2 obj2 = new Obj2();
obj2.setName("李刚");
obj2.setAge("38岁");
intent.putExtra("s1", obj2);

目标activity:

Bundle bundle = getIntent().getExtras();
Obj2 obj2 = (Obj2) bundle.get("s1");
String name = obj2.getName();
String age = obj2.getAge();

以上就是两种实现对象传输的方法。

THE END~

时间: 2024-08-06 21:15:51

Andorid学习之路(七)之 Serializable接口和Parcelable接口的相关文章

Java学习之路(七)

1:什么是异常?  中断了正常指令流的事件. 异常是一个对象 ,在出现异常时,虚拟机会生成一个异常对象 生成对象的类是由 JDK 提供的 上图解释: Throwable 是所有异常类的基类 Error  是指虚拟机在运行时产生的错误,在出现错误时,虚拟机会关闭 Exception  指异常 RuntimeException   运行时异常(也可称为  uncheck Exception ). e.g : class Test{ public static void main(String arg

koa学习之路七

之前的文章我们介绍了一下 koa koa-static静态资源中间件,本篇文章我们来看一下 koa 中 cookie 和 session 的使用. cookie 是存储于访问者的计算机中的变量.可以让我们用同一个浏览器访问同一个域名的时候共享数据. HTTP 是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站.每一次的访问,都是没有任何关系的. 我们将之前项目中的 app.js 改为如下代码: //引入 koa模块 co

Android中的Parcelable接口和Serializable用法和区别

Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator inter

webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲解SpringMVC+CXF环境下,怎么调用其他系统通过webService方式暴露出来的接口 ① 为避免怀疑同一个项目中调用本项目的接口,这里我新打开一个eclipse通过最原始的方式发布了一个webservice并启动保证可以被访问 打开浏览器确认可以被访问 ②进入CXF/bin 利用wsdl2

深入学习python (七) 如何用python调用C/C++接口

python这门优美而以人为本的语言的人性化导致其开发效率的高,高的同时他牺牲了的程序运行效率,在项目开发的后期,可以通过对某些耗时的松耦合的单独的瓶颈模块进行C++重构,然后直接用python改调用C++写的模块即可. 看过了网上的一些例子,自己也来试一试: 首先是一个C++程序的代码,test.cpp如下: #include <iostream> char const* hello() { return "hello, world"; } void bye() { us

我的学习之路_第二章_接口/多态

接口 (1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口.接口是功能的集合 接口不能创建对象 (2)格式: 父接口: public interface Inter { } 子类: public class InterImpl implements Inter { } (3)接口的特点: A:不需要被abstract修饰. B:类实现接口,可以单实现,还可以多实现. C:接口可以继承接口,可以单继承,也可以多继承. D:接口与父类的功能可以重复,均代表要具备某种功能. (

linux学习之路之bash及其特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的. 那么什么是shell呢? shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作. 在linux系统上面存放着多种类型的shell,这些shell存放在/etc/shells文件里,默认RedHat使用的shell为bash 下面介绍一些bash

Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)

最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spring 注解学习手札(五) 业务层事务处理 Spring 注解学习手札(六) 测试 Spring 注解学习手札(七) 补遗--@R

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec