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接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...
随机推荐
- redis连接数
1.应用程序会发起多少个请求连接?1)对于php程序,以短连接为主.redis的连接数等于:所有web server接口并发请求数/redis分片的个数.2)对于java应用程序,一般使用JedisP ...
- C++ redirect input
#include<iostream> #include<string> #include<fstream> using namespace std; int mai ...
- EXCEL时间日期转换为常规字符显示
当我们做报表导入的时候,我们不得不思考这样一个问题,遇到的数据是时间格式的,而在EXCEL中,时间格式的单元格实际上是以1900年以后来计算的,例如,1900年是闰年(显然可以被4整除),那么1900 ...
- Smarty单模板多缓存
Smarty单模板多缓存 单模板多缓存 在生成缓存.判断缓存是否存在时,增加第二个参数,会根据第二个参数来确定对应的缓存文件 清除缓存
- oracle数据泵实现不同用户之间的导出导入
来源于:http://www.cnblogs.com/kevinsun/archive/2007/02/03/638803.aspx http://blog.sina.com.cn/s/blog_68 ...
- 对Ip地址进行验证
依据正则表达式 boolean voliate(String ipString) { // 匹配ip正则表达式 String ip = "([1-9]|[1-9] ...
- 如何配置全世界最小的 MySQL 服务器
配置全世界最小的 MySQL 服务器——如何在一块 Intel Edison 为控制板上安装一个 MySQL 服务器. 介绍 在我最近的一篇博文中,物联网,消息以及 MySQL,我展示了如果 Part ...
- 关于使用 lua 脚本抢红包
1 java代码 package com.robert.RedisTest; import redis.clients.jedis.Jedis; public class RedisClient { ...
- chrome 26.0.XXX版本下media query流媒体查询有问题的bug
这段代码什么意思: @media only screen and (max-width: 1360px) 当用户的界面小于等于1360px的时候, 会加载该流媒体样式(此时的界面是包含滚动条的): ...
- 哈希 poj 3274
n个牛 二进制最多k位 给你n个数 求max(j-i)&&对应二进制位的和相同 7 1 1 1 倒的 6 0 1 1 7 1 1 1 2 0 1 ...