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

24016人阅读 评论(15) 收藏 举报 android layout encoding object button 2010

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

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

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

view plain copy to clipboard print ?
  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:

view plain copy to clipboard print ?
  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:

view plain copy to clipboard print ?
  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:

view plain copy to clipboard print ?
  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:

view plain copy to clipboard print ?
  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:

view plain copy to clipboard print ?
  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行):

view plain copy to clipboard print ?
  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按钮:

更多相关文章

  1. Android(安卓)LCD(三):Samsung LCD接口篇
  2. Android(安卓)SurfaceView使用示例(二)
  3. CaysnPrinter开发包接口说明文档 - PrinterLibs For Android
  4. 理解Android中的Handler/Message
  5. Android(安卓)context源码详解及深入分析
  6. Android(安卓)Intent传递对象和集合
  7. android实现Parcelable序列化对象
  8. Android(安卓)Drawable
  9. android activity之间传递bean类型数据

随机推荐

  1. android的内存监控
  2. android的第一个程序helloworld (有图有真
  3. Android执行文件apk的组成结构
  4. android 根据滑动隐藏或显示导航 类似手
  5. android studio打开旧项目遇到build.grad
  6. Android内核与主线linux内核的比较(Androi
  7. 将retrofit2和rxjava的初始化配置到appli
  8. layout_marginBottom的使用(将VIEW放置在
  9. 如何看Android刺激国产手机的洗牌?
  10. 《android 的四中动画效果》