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的工程,其中该工程的目录结构如下图:

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

2. 修改main.xml布局文件。布局文件的源码如下:

  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:

  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:

  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对象的数据。代码如下:

  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类

  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类:

  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进行注册。

  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】主界面截图:

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

【2】点击Serializable按钮的效果

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

【3】点击Parcelable按钮的效果

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

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

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

 
 
上一篇:Timeout Detection & Recovery (TDR)


下一篇:android中如何处理cookie