`
baobaoupup
  • 浏览: 466843 次
文章分类
社区版块
存档分类
最新评论

Android高手进阶教程(十六)---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

 
阅读更多

大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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="WelcometoMrwei'sblog."
  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. packagecom.tutor.objecttran;
  2. importjava.io.Serializable;
  3. publicclassPersonimplementsSerializable{
  4. privatestaticfinallongserialVersionUID=-7060210544600464481L;
  5. privateStringname;
  6. privateintage;
  7. publicStringgetName(){
  8. returnname;
  9. }
  10. publicvoidsetName(Stringname){
  11. this.name=name;
  12. }
  13. publicintgetAge(){
  14. returnage;
  15. }
  16. publicvoidsetAge(intage){
  17. this.age=age;
  18. }
  19. }

Book.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.os.Parcel;
  3. importandroid.os.Parcelable;
  4. publicclassBookimplementsParcelable{
  5. privateStringbookName;
  6. privateStringauthor;
  7. privateintpublishTime;
  8. publicStringgetBookName(){
  9. returnbookName;
  10. }
  11. publicvoidsetBookName(StringbookName){
  12. this.bookName=bookName;
  13. }
  14. publicStringgetAuthor(){
  15. returnauthor;
  16. }
  17. publicvoidsetAuthor(Stringauthor){
  18. this.author=author;
  19. }
  20. publicintgetPublishTime(){
  21. returnpublishTime;
  22. }
  23. publicvoidsetPublishTime(intpublishTime){
  24. this.publishTime=publishTime;
  25. }
  26. publicstaticfinalParcelable.Creator<Book>CREATOR=newCreator<Book>(){
  27. publicBookcreateFromParcel(Parcelsource){
  28. BookmBook=newBook();
  29. mBook.bookName=source.readString();
  30. mBook.author=source.readString();
  31. mBook.publishTime=source.readInt();
  32. returnmBook;
  33. }
  34. publicBook[]newArray(intsize){
  35. returnnewBook[size];
  36. }
  37. };
  38. publicintdescribeContents(){
  39. return0;
  40. }
  41. publicvoidwriteToParcel(Parcelparcel,intflags){
  42. parcel.writeString(bookName);
  43. parcel.writeString(author);
  44. parcel.writeInt(publishTime);
  45. }
  46. }

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

ObjectTranDemo.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. publicclassObjectTranDemoextendsActivityimplementsOnClickListener{
  9. privateButtonsButton,pButton;
  10. publicfinalstaticStringSER_KEY="com.tutor.objecttran.ser";
  11. publicfinalstaticStringPAR_KEY="com.tutor.objecttran.par";
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. setupViews();
  16. }
  17. //我的一贯作风呵呵
  18. publicvoidsetupViews(){
  19. sButton=(Button)findViewById(R.id.button1);
  20. pButton=(Button)findViewById(R.id.button2);
  21. sButton.setOnClickListener(this);
  22. pButton.setOnClickListener(this);
  23. }
  24. //Serializeable传递对象的方法
  25. publicvoidSerializeMethod(){
  26. PersonmPerson=newPerson();
  27. mPerson.setName("frankie");
  28. mPerson.setAge(25);
  29. IntentmIntent=newIntent(this,ObjectTranDemo1.class);
  30. BundlemBundle=newBundle();
  31. mBundle.putSerializable(SER_KEY,mPerson);
  32. mIntent.putExtras(mBundle);
  33. startActivity(mIntent);
  34. }
  35. //Pacelable传递对象方法
  36. publicvoidPacelableMethod(){
  37. BookmBook=newBook();
  38. mBook.setBookName("AndroidTutor");
  39. mBook.setAuthor("Frankie");
  40. mBook.setPublishTime(2010);
  41. IntentmIntent=newIntent(this,ObjectTranDemo2.class);
  42. BundlemBundle=newBundle();
  43. mBundle.putParcelable(PAR_KEY,mBook);
  44. mIntent.putExtras(mBundle);
  45. startActivity(mIntent);
  46. }
  47. //铵钮点击事件响应
  48. publicvoidonClick(Viewv){
  49. if(v==sButton){
  50. SerializeMethod();
  51. }else{
  52. PacelableMethod();
  53. }
  54. }
  55. }

ObjectTranDemo1.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.widget.TextView;
  5. publicclassObjectTranDemo1extendsActivity{
  6. @Override
  7. publicvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. TextViewmTextView=newTextView(this);
  10. PersonmPerson=(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);
  11. mTextView.setText("Younameis:"+mPerson.getName()+"/n"+
  12. "Youageis:"+mPerson.getAge());
  13. setContentView(mTextView);
  14. }
  15. }

ObjectTranDemo2.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.widget.TextView;
  5. publicclassObjectTranDemo2extendsActivity{
  6. publicvoidonCreate(BundlesavedInstanceState){
  7. super.onCreate(savedInstanceState);
  8. TextViewmTextView=newTextView(this);
  9. BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);
  10. mTextView.setText("Booknameis:"+mBook.getBookName()+"/n"+
  11. "Authoris:"+mBook.getAuthor()+"/n"+
  12. "PublishTimeis:"+mBook.getPublishTime());
  13. setContentView(mTextView);
  14. }
  15. }

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.tutor.objecttran"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  7. <activityandroid:name=".ObjectTranDemo"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <actionandroid:name="android.intent.action.MAIN"/>
  11. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  12. </intent-filter>
  13. </activity>
  14. <activityandroid:name=".ObjectTranDemo1"></activity>
  15. <activityandroid:name=".ObjectTranDemo2"></activity>
  16. </application>
  17. <uses-sdkandroid:minSdkVersion="7"/>
  18. </manifest>

第六步:运行上述工程查看效果图啦:

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

OK~今天就先到这里了,大家如果要嫌代码过长,不想敲的话,可以留下Email.俺给你邮过去,呵呵~希望对大家 有点小帮助 ,bye~

转自:http://blog.csdn.net/android_tutor/article/details/5740845

大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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="WelcometoMrwei'sblog."
  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. packagecom.tutor.objecttran;
  2. importjava.io.Serializable;
  3. publicclassPersonimplementsSerializable{
  4. privatestaticfinallongserialVersionUID=-7060210544600464481L;
  5. privateStringname;
  6. privateintage;
  7. publicStringgetName(){
  8. returnname;
  9. }
  10. publicvoidsetName(Stringname){
  11. this.name=name;
  12. }
  13. publicintgetAge(){
  14. returnage;
  15. }
  16. publicvoidsetAge(intage){
  17. this.age=age;
  18. }
  19. }

Book.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.os.Parcel;
  3. importandroid.os.Parcelable;
  4. publicclassBookimplementsParcelable{
  5. privateStringbookName;
  6. privateStringauthor;
  7. privateintpublishTime;
  8. publicStringgetBookName(){
  9. returnbookName;
  10. }
  11. publicvoidsetBookName(StringbookName){
  12. this.bookName=bookName;
  13. }
  14. publicStringgetAuthor(){
  15. returnauthor;
  16. }
  17. publicvoidsetAuthor(Stringauthor){
  18. this.author=author;
  19. }
  20. publicintgetPublishTime(){
  21. returnpublishTime;
  22. }
  23. publicvoidsetPublishTime(intpublishTime){
  24. this.publishTime=publishTime;
  25. }
  26. publicstaticfinalParcelable.Creator<Book>CREATOR=newCreator<Book>(){
  27. publicBookcreateFromParcel(Parcelsource){
  28. BookmBook=newBook();
  29. mBook.bookName=source.readString();
  30. mBook.author=source.readString();
  31. mBook.publishTime=source.readInt();
  32. returnmBook;
  33. }
  34. publicBook[]newArray(intsize){
  35. returnnewBook[size];
  36. }
  37. };
  38. publicintdescribeContents(){
  39. return0;
  40. }
  41. publicvoidwriteToParcel(Parcelparcel,intflags){
  42. parcel.writeString(bookName);
  43. parcel.writeString(author);
  44. parcel.writeInt(publishTime);
  45. }
  46. }

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

ObjectTranDemo.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. publicclassObjectTranDemoextendsActivityimplementsOnClickListener{
  9. privateButtonsButton,pButton;
  10. publicfinalstaticStringSER_KEY="com.tutor.objecttran.ser";
  11. publicfinalstaticStringPAR_KEY="com.tutor.objecttran.par";
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. setupViews();
  16. }
  17. //我的一贯作风呵呵
  18. publicvoidsetupViews(){
  19. sButton=(Button)findViewById(R.id.button1);
  20. pButton=(Button)findViewById(R.id.button2);
  21. sButton.setOnClickListener(this);
  22. pButton.setOnClickListener(this);
  23. }
  24. //Serializeable传递对象的方法
  25. publicvoidSerializeMethod(){
  26. PersonmPerson=newPerson();
  27. mPerson.setName("frankie");
  28. mPerson.setAge(25);
  29. IntentmIntent=newIntent(this,ObjectTranDemo1.class);
  30. BundlemBundle=newBundle();
  31. mBundle.putSerializable(SER_KEY,mPerson);
  32. mIntent.putExtras(mBundle);
  33. startActivity(mIntent);
  34. }
  35. //Pacelable传递对象方法
  36. publicvoidPacelableMethod(){
  37. BookmBook=newBook();
  38. mBook.setBookName("AndroidTutor");
  39. mBook.setAuthor("Frankie");
  40. mBook.setPublishTime(2010);
  41. IntentmIntent=newIntent(this,ObjectTranDemo2.class);
  42. BundlemBundle=newBundle();
  43. mBundle.putParcelable(PAR_KEY,mBook);
  44. mIntent.putExtras(mBundle);
  45. startActivity(mIntent);
  46. }
  47. //铵钮点击事件响应
  48. publicvoidonClick(Viewv){
  49. if(v==sButton){
  50. SerializeMethod();
  51. }else{
  52. PacelableMethod();
  53. }
  54. }
  55. }

ObjectTranDemo1.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.widget.TextView;
  5. publicclassObjectTranDemo1extendsActivity{
  6. @Override
  7. publicvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. TextViewmTextView=newTextView(this);
  10. PersonmPerson=(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);
  11. mTextView.setText("Younameis:"+mPerson.getName()+"/n"+
  12. "Youageis:"+mPerson.getAge());
  13. setContentView(mTextView);
  14. }
  15. }

ObjectTranDemo2.java:

  1. packagecom.tutor.objecttran;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.widget.TextView;
  5. publicclassObjectTranDemo2extendsActivity{
  6. publicvoidonCreate(BundlesavedInstanceState){
  7. super.onCreate(savedInstanceState);
  8. TextViewmTextView=newTextView(this);
  9. BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);
  10. mTextView.setText("Booknameis:"+mBook.getBookName()+"/n"+
  11. "Authoris:"+mBook.getAuthor()+"/n"+
  12. "PublishTimeis:"+mBook.getPublishTime());
  13. setContentView(mTextView);
  14. }
  15. }

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.tutor.objecttran"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  7. <activityandroid:name=".ObjectTranDemo"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <actionandroid:name="android.intent.action.MAIN"/>
  11. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  12. </intent-filter>
  13. </activity>
  14. <activityandroid:name=".ObjectTranDemo1"></activity>
  15. <activityandroid:name=".ObjectTranDemo2"></activity>
  16. </application>
  17. <uses-sdkandroid:minSdkVersion="7"/>
  18. </manifest>

第六步:运行上述工程查看效果图啦:

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

OK~今天就先到这里了,大家如果要嫌代码过长,不想敲的话,可以留下Email.俺给你邮过去,呵呵~希望对大家 有点小帮助 ,bye~

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics