Intent传递对象的两种方法(Serializable,Parcelable) (转)

时间:2023-03-08 18:02:45

今天讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口

第一步:新建一个Android工程命名为IntentDemo

第二步:修改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="Welcome to Mr wei's blog."
  11. />
  12. <Button
  13. android:id="@+id/button1"
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content"
  16. android:text="Serializable"
  17. />
  18. <Button
  19. android:id="@+id/button2"
  20. android:layout_width="fill_parent"
  21. android:layout_height="wrap_content"
  22. android:text="Parcelable"
  23. />
  24. </LinearLayout>

第三步:新建两个类一个是Person.java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下: 
Person.java

  1. package cn.caiwb.intent;
  2. import java.io.Serializable;
  3. public class Person implements Serializable {
  4. private String name;
  5. private int age;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public int getAge() {
  13. return age;
  14. }
  15. public void setAge(int age) {
  16. this.age = age;
  17. }
  18. }

Book.java

  1. package cn.caiwb.intent;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. public class Book implements Parcelable {
  5. private String bookName;
  6. private String author;
  7. private int publishTime;
  8. public String getBookName() {
  9. return bookName;
  10. }
  11. public void setBookName(String bookName) {
  12. this.bookName = bookName;
  13. }
  14. public String getAuthor() {
  15. return author;
  16. }
  17. public void setAuthor(String author) {
  18. this.author = author;
  19. }
  20. public int getPublishTime() {
  21. return publishTime;
  22. }
  23. public void setPublishTime(int publishTime) {
  24. this.publishTime = publishTime;
  25. }
  26. public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {
  27. public Book createFromParcel(Parcel source) {
  28. Book mBook = new Book();
  29. mBook.bookName = source.readString();
  30. mBook.author = source.readString();
  31. mBook.publishTime = source.readInt();
  32. return mBook;
  33. }
  34. public Book[] newArray(int size) {
  35. return new Book[size];
  36. }
  37. };
  38. public int describeContents() {
  39. return 0;
  40. }
  41. public void writeToParcel(Parcel parcel, int flags) {
  42. parcel.writeString(bookName);
  43. parcel.writeString(author);
  44. parcel.writeInt(publishTime);
  45. }
  46. }

第四步:修改IntentDemo.java,并且新建两个Activity,一个是IntentDemo1.java,别一个是IntentDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:

IntentDemo.java

  1. package cn.caiwb.intent;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. public class IntentDemo extends Activity implements OnClickListener {
  9. private Button sButton,pButton;
  10. public  final static String SER_KEY = "cn.caiwb.intent.ser";
  11. public  final static String PAR_KEY = "cn.caiwb.intent.par";
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. setupViews();
  16. }
  17. public void setupViews(){
  18. sButton = (Button)findViewById(R.id.button1);
  19. pButton = (Button)findViewById(R.id.button2);
  20. sButton.setOnClickListener(this);
  21. pButton.setOnClickListener(this);
  22. }
  23. //Serializeable传递对象的方法
  24. public void SerializeMethod(){
  25. Person mPerson = new Person();
  26. mPerson.setName("frankie");
  27. mPerson.setAge(25);
  28. Intent mIntent = new Intent(this,IntentDemo1.class);
  29. Bundle mBundle = new Bundle();
  30. mBundle.putSerializable(SER_KEY,mPerson);
  31. mIntent.putExtras(mBundle);
  32. startActivity(mIntent);
  33. }
  34. //Pacelable传递对象方法
  35. public void PacelableMethod(){
  36. Book mBook = new Book();
  37. mBook.setBookName("Android Tutor");
  38. mBook.setAuthor("Frankie");
  39. mBook.setPublishTime(2010);
  40. Intent mIntent = new Intent(this,IntentDemo2.class);
  41. Bundle mBundle = new Bundle();
  42. mBundle.putParcelable(PAR_KEY, mBook);
  43. mIntent.putExtras(mBundle);
  44. startActivity(mIntent);
  45. }
  46. //铵钮点击事件响应
  47. public void onClick(View v) {
  48. if(v == sButton){
  49. SerializeMethod();
  50. }else{
  51. PacelableMethod();
  52. }
  53. }
  54. }

IntentDemo1.java

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

IntentDemo2.java

  1. package cn.caiwb.intent;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. public class IntentDemo2 extends Activity {
  6. public void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. TextView mTextView = new TextView(this);
  9. Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);
  10. mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+
  11. "Author is: " + mBook.getAuthor() + "/n" +
  12. "PublishTime is: " + mBook.getPublishTime());
  13. setContentView(mTextView);
  14. }
  15. }

OK 可以了~

转自:链接