Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
http://blog.csdn.net/cjjky/article/details/6441104
在Android中的不同Activity之间传递对象,我们可以考虑采用Bundle.putSerializable(Key,Object);也可以考虑采用Bundle.putParcelable(Key, Object);其中前面一种方法中的Object要实现Serializable接口,后面一种方法中的Object要实现Parcelable接口。下面我们以一个完整的例子来说明。
1.新建一个Android的工程,其中该工程的目录结构如下图:
2. 修改main.xml布局文件。布局文件的源码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello"
- />
- <Button
- android:id="@+id/serButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Serializable"/>
- <Button
- android:id="@+id/parButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Parcelable"/>
- </LinearLayout>
3.在工程的src目录下新建一个实体类包,命名为com.andy.entity.同时在该package中添加两个实体类,一个是Person.Java,该类实现Serializable接口;一个是Police.java,该类实现Parcelable接口。代码分别如下:
Person.java:
- package com.andy.entity;
- import java.io.Serializable;
- public class Person implements Serializable {
- private static final long serialVersionUID = -6919461967497580385L;
- private String name;
- private int 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;
- }
- }
Police.java:
- package com.andy.entity;
- import android.os.Parcel;
- import android.os.Parcelable;
- public class Police implements Parcelable {
- private String name;
- private int workTime;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getWorkTime() {
- return workTime;
- }
- public void setWorkTime(int workTime) {
- this.workTime = workTime;
- }
- public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() {
- @Override
- public Police createFromParcel(Parcel source) {
- Police police = new Police();
- police.name = source.readString();
- police.workTime = source.readInt();
- return police;
- }
- @Override
- public Police[] newArray(int size) {
- return new Police[size];
- }
- };
- @Override
- public int describeContents() {
- return 0;
- }
- @Override
- public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeString(name);
- parcel.writeInt(workTime);
- }
- }
4.在包com.andy.testdemo中修改TestActivity.java类,同时在该包中添加类SerializableDemo和ParcelableDemo,分别继承了Activity类和分别显示Person对象和Police对象的数据。代码如下:
- package com.andy.testdemo;
- import com.andy.entity.Person;
- import com.andy.entity.Police;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- public class TestActivity extends Activity {
- private Button sButton,pButton;
- public final static String SER_KEY = "com.andy.ser";
- public final static String PAR_KEY = "com.andy.par";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- sButton = (Button)findViewById(R.id.serButton);
- sButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- SerializeMethod();
- }
- });
- pButton = (Button)findViewById(R.id.parButton);
- pButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PacelableMethod();
- }
- });
- }
- /**
- * Serializeable传递对象的方法
- */
- private void SerializeMethod(){
- Person mPerson = new Person();
- mPerson.setName("andy");
- mPerson.setAge(26);
- Intent mIntent = new Intent(this,SerializableDemo.class);
- Bundle mBundle = new Bundle();
- mBundle.putSerializable(SER_KEY,mPerson);
- mIntent.putExtras(mBundle);
- startActivity(mIntent);
- }
- /**
- * Pacelable传递对象方法
- */
- private void PacelableMethod(){
- Police mPolice = new Police();
- mPolice.setName("I am Police");
- mPolice.setWorkTime(2008);
- Intent mIntent = new Intent(this,ParcelableDemo.class);
- Bundle mBundle = new Bundle();
- mBundle.putParcelable(PAR_KEY, mPolice);
- mIntent.putExtras(mBundle);
- startActivity(mIntent);
- }
- }
SerializableDemo.java类
- package com.andy.testdemo;
- import com.andy.entity.Person;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class SerializableDemo extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView mTextView = new TextView(this);
- Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY);
- mTextView.setText("You name is: " + mPerson.getName() + "/n"+
- "You age is: " + mPerson.getAge());
- setContentView(mTextView);
- }
- }
ParcelableDemo.java类:
- package com.andy.testdemo;
- import com.andy.entity.Police;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class ParcelableDemo extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView mTextView = new TextView(this);
- Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY);
- mTextView.setText("Police name is: " + mPolice.getName()+"/n"+
- "WorkTime is: " + mPolice.getWorkTime() + "/n");
- setContentView(mTextView);
- }
- }
5.在AndroidManifest.xml文件中为新添加的两个Activity进行注册。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.andy.testdemo"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".TestActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".SerializableDemo"/>
- <activity android:name=".ParcelableDemo"/>
- </application>
- <uses-sdk android:minSdkVersion="8" />
- </manifest>
6.运行程序查看效果图:
【1】主界面截图:
【2】点击Serializable按钮的效果
【3】点击Parcelable按钮的效果
=========================================================================
以上是如何采用Intent在不同的Activity之间传递对象的例子。
Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]的更多相关文章
- 【Android基础】利用Intent在Activity之间传递数据
前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通. 从一个Activ ...
- 在Activity之间传递参数(三)——serializable和parcelable的区别
传递值对象: 一.serializable实现:简单易用 serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可.Serializable 接口是一种 ...
- Android之Activity之间传递对象
在非常多时候,我们须要在Activity之间传递对象,比方当你点击了某列表的item,须要传递给下一个Activity该对象,那我们须要该怎么做呢? Android支持两种传递对象的方式.一种是bun ...
- [Android学习]Activity之间传递对象和对象集合
开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
- android中使用Intent在activity之间传递数据
android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...
- 利用Bundle在activity之间传递对象
(2010-12-04 09:45:54) 转载▼ 标签: it 分类: android开发 转自:http://chen592969029.javaeye.com/blog/772656 假如需要在 ...
- 【转】Android中如何使用Bundle传递对象[使用Serializable或者Parcelable] -- 不错
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1211/694.html Android中Bundle类的作用 Bun ...
- Activity 之间 传递 List 封装的对象或者对象
项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...
随机推荐
- MVC认知路【点点滴滴支离破碎】【四】----捆绑和缩小(BundleConfig.RegisterBundles)
原文链接:http://www.asp.net/mvc/overview/performance/bundling-and-minification 打开App_Start\BundleConfig. ...
- ElasticSearch入门系列(四)分布式初探
序言:ElasticSearch致力于隐藏分布式系统的复杂性,以下的操作都是在底层自动完成的: 将你的文档分区到不同的容器或者分片(shards),他们可以存在于一个或多个节点中 将分片均匀的分配到各 ...
- git --- push到远端
- linux 配置 crontab
linux中的crontab是定时用的,下面的cron服务就是定时器的意思 crontab -l 列举所有的cron服务 crontab -e 修改cron服务 crontab -r 删除cron服务 ...
- Android 自定义Popupwindow 注意事项,手机和平板的区别
首先自定义ppw是要继承Popupwindow 的 而要成功的显示出自定义的ppw就必须实现下面的三句代码 // 必要的三要素下面,不然popWind显示不出来 this.setContentView ...
- Linux_日志管理介绍(一)
一.介绍 1.CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务,但是rsyslogd是和syslogd服务相兼容的 2.除了系统默认的日志之外,采用RPM方式安装的系 ...
- 【CodeVS 2822】爱在心中
“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有着一个 ...
- maven2打包不同jdk版本的包
通常在一些特别情况下,我们需要为单独某一个构件打包多个不同jdk版本的包,用来支持不同的jdk,基于maven我们就可以很方便的做到这点. 1.在项目的pom文件中加入如下配置 <project ...
- 安装Win7提示Windows无法安装到磁盘怎么办
Windows之家(www.windowszj.com):在安装Win7系统的过程中,由于每台电脑的状态不一样,比如硬件配置原因,或者是硬盘格式.硬盘状态等问题,会使得每台电脑在安装过程中都会有些不一 ...
- Mybatis 高级结果映射 ResultMap Association Collection
在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...