700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android中Intent传递对象的两种方法(Serializable Parcelable)

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

时间:2021-09-28 12:53:17

相关推荐

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

这篇文章转自博客园

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

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

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

view plaincopy to clipboardprint? <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="WelcometoMrwei'sblog." /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Serializable" /> <Button android:id="@+id/button2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Parcelable" /> </LinearLayout>

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

Person.java:

view plaincopy to clipboardprint? packagecom.tutor.objecttran; importjava.io.Serializable; publicclassPersonimplementsSerializable{ privatestaticfinallongserialVersionUID=-7060210544600464481L; privateStringname; privateintage; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } }

Book.java:

view plaincopy to clipboardprint? packagecom.tutor.objecttran; importandroid.os.Parcel; importandroid.os.Parcelable; publicclassBookimplementsParcelable{ privateStringbookName; privateStringauthor; privateintpublishTime; publicStringgetBookName(){ returnbookName; } publicvoidsetBookName(StringbookName){ this.bookName=bookName; } publicStringgetAuthor(){ returnauthor; } publicvoidsetAuthor(Stringauthor){ this.author=author; } publicintgetPublishTime(){ returnpublishTime; } publicvoidsetPublishTime(intpublishTime){ this.publishTime=publishTime; } publicstaticfinalParcelable.Creator<Book>CREATOR=newCreator<Book>(){ publicBookcreateFromParcel(Parcelsource){ BookmBook=newBook(); mBook.bookName=source.readString(); mBook.author=source.readString(); mBook.publishTime=source.readInt(); returnmBook; } publicBook[]newArray(intsize){ returnnewBook[size]; } }; publicintdescribeContents(){ return0; } publicvoidwriteToParcel(Parcelparcel,intflags){ parcel.writeString(bookName); parcel.writeString(author); parcel.writeInt(publishTime); } }

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

ObjectTranDemo.java:

view plaincopy to clipboardprint? packagecom.tutor.objecttran; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; publicclassObjectTranDemoextendsActivityimplementsOnClickListener{ privateButtonsButton,pButton; publicfinalstaticStringSER_KEY="com.tutor.objecttran.ser"; publicfinalstaticStringPAR_KEY="com.tutor.objecttran.par"; publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } //我的一贯作风呵呵 publicvoidsetupViews(){ sButton=(Button)findViewById(R.id.button1); pButton=(Button)findViewById(R.id.button2); sButton.setOnClickListener(this); pButton.setOnClickListener(this); } //Serializeable传递对象的方法 publicvoidSerializeMethod(){ PersonmPerson=newPerson(); mPerson.setName("frankie"); mPerson.setAge(25); IntentmIntent=newIntent(this,ObjectTranDemo1.class); BundlemBundle=newBundle(); mBundle.putSerializable(SER_KEY,mPerson); mIntent.putExtras(mBundle); startActivity(mIntent); } //Pacelable传递对象方法 publicvoidPacelableMethod(){ BookmBook=newBook(); mBook.setBookName("AndroidTutor"); mBook.setAuthor("Frankie"); mBook.setPublishTime(); IntentmIntent=newIntent(this,ObjectTranDemo2.class); BundlemBundle=newBundle(); mBundle.putParcelable(PAR_KEY,mBook); mIntent.putExtras(mBundle); startActivity(mIntent); } //铵钮点击事件响应 publicvoidonClick(Viewv){ if(v==sButton){ SerializeMethod(); }else{ PacelableMethod(); } } }

ObjectTranDemo1.java:

view plaincopy to clipboardprint? packagecom.tutor.objecttran; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.TextView; publicclassObjectTranDemo1extendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); TextViewmTextView=newTextView(this); PersonmPerson=(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY); mTextView.setText("Younameis:"+mPerson.getName()+"/n"+ "Youageis:"+mPerson.getAge()); setContentView(mTextView); } }

ObjectTranDemo2.java:

view plaincopy to clipboardprint? packagecom.tutor.objecttran; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.TextView; publicclassObjectTranDemo2extendsActivity{ publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); TextViewmTextView=newTextView(this); BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); mTextView.setText("Booknameis:"+mBook.getBookName()+"/n"+ "Authoris:"+mBook.getAuthor()+"/n"+ "PublishTimeis:"+mBook.getPublishTime()); setContentView(mTextView); } }

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

view plaincopy to clipboardprint? <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="/apk/res/android" package="com.tutor.objecttran" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".ObjectTranDemo" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name=".ObjectTranDemo1"></activity> <activityandroid:name=".ObjectTranDemo2"></activity> </application> <uses-sdkandroid:minSdkVersion="7"/> </manifest>

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

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。