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布局文件。布局文件的源码如下:

[c-sharp] view plain copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/hello"
  11. />
  12. <Button
  13. android:id="@+id/serButton"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:text="Serializable"/>
  17. <Button
  18. android:id="@+id/parButton"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:text="Parcelable"/>
  22. </LinearLayout>

3.在工程的src目录下新建一个实体类包,命名为com.andy.entity.同时在该package中添加两个实体类,一个是Person.Java,该类实现Serializable接口;一个是Police.java,该类实现Parcelable接口。代码分别如下:

Person.java:

[c-sharp] view plain copy

  1. package com.andy.entity;
  2. import java.io.Serializable;
  3. public class Person implements Serializable {
  4. private static final long serialVersionUID = -6919461967497580385L;
  5. private String name;
  6. private int age;
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getAge() {
  14. return age;
  15. }
  16. public void setAge(int age) {
  17. this.age = age;
  18. }
  19. }

Police.java:

[c-sharp] view plain copy

  1. package com.andy.entity;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. public class Police implements Parcelable {
  5. private String name;
  6. private int workTime;
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getWorkTime() {
  14. return workTime;
  15. }
  16. public void setWorkTime(int workTime) {
  17. this.workTime = workTime;
  18. }
  19. public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() {
  20. @Override
  21. public Police createFromParcel(Parcel source) {
  22. Police police = new Police();
  23. police.name = source.readString();
  24. police.workTime = source.readInt();
  25. return police;
  26. }
  27. @Override
  28. public Police[] newArray(int size) {
  29. return new Police[size];
  30. }
  31. };
  32. @Override
  33. public int describeContents() {
  34. return 0;
  35. }
  36. @Override
  37. public void writeToParcel(Parcel parcel, int flags) {
  38. parcel.writeString(name);
  39. parcel.writeInt(workTime);
  40. }
  41. }

4.在包com.andy.testdemo中修改TestActivity.java类,同时在该包中添加类SerializableDemo和ParcelableDemo,分别继承了Activity类和分别显示Person对象和Police对象的数据。代码如下:

[c-sharp] view plain copy

  1. package com.andy.testdemo;
  2. import com.andy.entity.Person;
  3. import com.andy.entity.Police;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.Button;
  9. public class TestActivity extends Activity {
  10. private Button sButton,pButton;
  11. public final static String SER_KEY = "com.andy.ser";
  12. public final static String PAR_KEY = "com.andy.par";
  13. /** Called when the activity is first created. */
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. sButton = (Button)findViewById(R.id.serButton);
  19. sButton.setOnClickListener(new View.OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. SerializeMethod();
  23. }
  24. });
  25. pButton = (Button)findViewById(R.id.parButton);
  26. pButton.setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. PacelableMethod();
  30. }
  31. });
  32. }
  33. /**
  34. * Serializeable传递对象的方法
  35. */
  36. private void SerializeMethod(){
  37. Person mPerson = new Person();
  38. mPerson.setName("andy");
  39. mPerson.setAge(26);
  40. Intent mIntent = new Intent(this,SerializableDemo.class);
  41. Bundle mBundle = new Bundle();
  42. mBundle.putSerializable(SER_KEY,mPerson);
  43. mIntent.putExtras(mBundle);
  44. startActivity(mIntent);
  45. }
  46. /**
  47. * Pacelable传递对象方法
  48. */
  49. private void PacelableMethod(){
  50. Police mPolice = new Police();
  51. mPolice.setName("I am Police");
  52. mPolice.setWorkTime(2008);
  53. Intent mIntent = new Intent(this,ParcelableDemo.class);
  54. Bundle mBundle = new Bundle();
  55. mBundle.putParcelable(PAR_KEY, mPolice);
  56. mIntent.putExtras(mBundle);
  57. startActivity(mIntent);
  58. }
  59. }

SerializableDemo.java类

[c-sharp] view plain copy

  1. package com.andy.testdemo;
  2. import com.andy.entity.Person;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class SerializableDemo extends Activity {
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. TextView mTextView = new TextView(this);
  11. Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY);
  12. mTextView.setText("You name is: " + mPerson.getName() + "/n"+
  13. "You age is: " + mPerson.getAge());
  14. setContentView(mTextView);
  15. }
  16. }

ParcelableDemo.java类:

[c-sharp] view plain copy

  1. package com.andy.testdemo;
  2. import com.andy.entity.Police;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.widget.TextView;
  6. public class ParcelableDemo extends Activity {
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. TextView mTextView = new TextView(this);
  11. Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY);
  12. mTextView.setText("Police name is: " + mPolice.getName()+"/n"+
  13. "WorkTime is: " + mPolice.getWorkTime() + "/n");
  14. setContentView(mTextView);
  15. }
  16. }

5.在AndroidManifest.xml文件中为新添加的两个Activity进行注册。

[c-sharp] view plain copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.andy.testdemo"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".TestActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <activity android:name=".SerializableDemo"/>
  15. <activity android:name=".ParcelableDemo"/>
  16. </application>
  17. <uses-sdk android:minSdkVersion="8" />
  18. </manifest>

6.运行程序查看效果图:

【1】主界面截图:

【2】点击Serializable按钮的效果

【3】点击Parcelable按钮的效果

=========================================================================

以上是如何采用Intent在不同的Activity之间传递对象的例子。

时间: 2024-12-27 17:38:42

Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]的相关文章

Android中Intent在Activity之间传递对象[Serializable或Parcelable]

使用intent启动activity /** * 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();

【Android基础】利用Intent在Activity之间传递数据

前言: 上一篇文章给大家聊了Intent的使用方法.怎样用Intent启动Activity和隐式Intent.这一篇文章给大家聊聊怎样利用Intent在Activity之间进行沟通. 从一个Activity获取返回结果: 启动一个Activity不不过startActivity(Intent intent)一种方法.你也能够通过startActivityForResult()启动一个Activity而且在它退出的时候收到一个返回结果. 比方.你能够调用系统相机在你的应用中,拍了一张照片,然后返回

Android之Activity之间传递对象

在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢? Android支持两种传递对象的方式,一种是bundle.putSerializable方式,一种是bundle.putParcelable. 那么下面我们就用一个例子来实践Activity传递对象: 1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生.内容分别如下: <span style="font-size:1

android中使用Intent在activity之间传递数据

android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name", "使用Intent传递数据"); startActivity(intent); 然后再目标activity中接收数据: Intent intent=getInten

Android 学习之路 1:Activity之间传递数据的四种方式

传递数据 新建 Activity 在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity. 此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用. 用Intent 发送数据 在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件. Button button; @Override protected void onCreate(B

Intent 在Activity之间传递参数 制作两个数的乘积

首先取得text中的值 首先定义两个Editext 获取这两个控件 one=(editText)findViewBYId(R.id.editText1); two=(editText)findViewBYid(R.id.editText2); //定义两个变量 onestr  twostr 从edittext里面取出值来分别放到 onestr 和 twostr中 String onestr= one.getText().toString(); String twostr=one.getText(

Android2个Activity之间传递对象

为了实现android activity之间的数据传递,主要利用意图Intent 对象的方法来完成. 基本数据类型的传递是相当简单了,主要通过如下方式完成如下: putExtra方法来完成. 这里就不再描述. 主要是传递对象类型数据. 1.实体类需要先序列化实现Serializable接口,利用Bundle.putSerializable(Key,Object);完成数据传递. 2.实体类实现Parcelable接口,利用Bundle.putParcelable(Key, Object);完成数

利用Bundle在activity之间传递对象

(2010-12-04 09:45:54) 转载▼ 标签: it 分类: android开发 转自:http://chen592969029.javaeye.com/blog/772656 假如需要在两个activity间传递数据,我们通常都是用Bundle,但是里面似乎只有一些放置一些Java中已经有的数据类型,像String,int,double等,但如果要传递一个对象呢?不难发现Bundle中有一个方法putSerializable,利用该对象就可以传递对象了,不过传递的对象要实现Seri

Activity 之间 传递 List 封装的对象或者对象

项目中遇到 从也个页面向另一个页面跳转传递一个List 封装的对象 .按网上查的资料 需要把 对象 实现 Serializable接口. 写了一下,但是跳转直接崩溃,一直看错误之日找不到原因后来自习教案代码,发现bean里面还有其他bean,对象里的对象没有 进行序列化.记录分享一下. 代码如下: 两个Bean 文件 import java.io.Serializable; import java.util.List; /** * ${JHS} */ public class Knowledge