Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法

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: [c-sharp] view plain copy 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之间传递对象的例子。

时间: 2024-10-24 01:39:39

Android中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法的相关文章

Intent传递对象之Serializable和Parcelable的区别

Intent在不同的组件中传递对象数据的应用非常普遍,大家都知道在intent传递对象的方法有两种:1.实现Serializable接口.2.实现Parcelable接口. Android中Intent传递对象的两种方法Serializable,Parcelable请点击了解详情. 为什么要将对象序列化? 1.永久性保存对象,保存对象的字节序列到本地文件中: 2.用过序列化对象在网络中传递对象: 3.通过序列化对象在进程间传递对象. 1.实现Serializable接口 Serializable

Android中的Intent对象完全解析

一. Intent 作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯.比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity 或者servi

Serializable与Parcelable传递对象详解(activity间传递对象方式)

先了解什么是序列化? 序列化是什么:  序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.  序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输.反序列化就是打开字节流并重构对象.对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据.恢复数据要求有恢复数据的对象实例  序列化的什么特点:  如果某个类能够被序列化,其子类也可以被序列化.声明为static和transient类型的成员数据不能被序列

Android基于Intent实现Activity之间数据传递的方法_Android

本文实例讲述了Android基于Intent实现Activity之间数据传递的方法.分享给大家供大家参考,具体如下: MainActivity: package com.test.intentdemo; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import andro

Android 中Activity 之间传递参数

Android 中Activity 之间传递参数 1.传递简单数据 在A Activity中 findViewById(R.id.startBActicityBtn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,TheActivity.class); // 对基础的数据类型进行传递 i.

Android Activity之间传递图片(Bitmap)的方法_Android

在Android开发中:Activity之间传递参数是常见的事:如果我们要在Activity之间传递图片:1.MainActivity中包括一个ImageView:当我们点击ImageView时:把图片传递给另外一个Activity MainActivity的主要代码: 复制代码 代码如下: Intent intent=new Intent(MainActivity.this,TranActivity.class);            intent.putExtra("bitmap"

大叔也说Xamarin~Android篇~Activity之间传递数组

原文:大叔也说Xamarin~Android篇~Activity之间传递数组 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别一个Activity,这就遇到了多个Activity之间传递数据的问题,这也是今天我们要说的! 先聊聊Activity 首先一个Activity都会去继承Activity类,这个类里有方法已经替我们实现,我们可以把activity看

关于Android Activity之间传递数据的6种方式

使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra("data",str); //激活意图 startActivity(intent); 第二个Activity中 // 获取意图对象 Intent intent = getIntent(); //获取传递的值 String str = intent.ge

Android Activity之间传递图片(Bitmap)的方法

在Android开发中:Activity之间传递参数是常见的事:如果我们要在Activity之间传递图片:1.MainActivity中包括一个ImageView:当我们点击ImageView时:把图片传递给另外一个Activity MainActivity的主要代码:复制代码 代码如下:Intent intent=new Intent(MainActivity.this,TranActivity.class);            intent.putExtra("bitmap",