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

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


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

[xhtml] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="WelcometoMrwei'sblog."/><Buttonandroid:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Serializable"/><Buttonandroid:id="@+id/button2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Parcelable"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/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="Welcome to Mr wei's blog." /> <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:

[java] view plain copy print ?
  1. 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;}}
package com.tutor.objecttran; import java.io.Serializable; public class Person implements Serializable { private static final long serialVersionUID = -7060210544600464481L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

Book.java:

[java] view plain copy print ?
  1. 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);}}
package com.tutor.objecttran; import android.os.Parcel; import android.os.Parcelable; public class Book implements Parcelable { private String bookName; private String author; private int publishTime; public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishTime() { return publishTime; } public void setPublishTime(int publishTime) { this.publishTime = publishTime; } public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { public Book createFromParcel(Parcel source) { Book mBook = new Book(); mBook.bookName = source.readString(); mBook.author = source.readString(); mBook.publishTime = source.readInt(); return mBook; } public Book[] newArray(int size) { return new Book[size]; } }; public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(bookName); parcel.writeString(author); parcel.writeInt(publishTime); } }

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

ObjectTranDemo.java:

[java] view plain copy print ?
  1. 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(2010);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();}}}
package com.tutor.objecttran; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ObjectTranDemo extends Activity implements OnClickListener { private Button sButton,pButton; public final static String SER_KEY = "com.tutor.objecttran.ser"; public final static String PAR_KEY = "com.tutor.objecttran.par"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } //我的一贯作风呵呵 public void setupViews(){ sButton = (Button)findViewById(R.id.button1); pButton = (Button)findViewById(R.id.button2); sButton.setOnClickListener(this); pButton.setOnClickListener(this); } //Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.setName("frankie"); mPerson.setAge(25); Intent mIntent = new Intent(this,ObjectTranDemo1.class); Bundle mBundle = new Bundle(); mBundle.putSerializable(SER_KEY,mPerson); mIntent.putExtras(mBundle); startActivity(mIntent); } //Pacelable传递对象方法 public void PacelableMethod(){ Book mBook = new Book(); mBook.setBookName("Android Tutor"); mBook.setAuthor("Frankie"); mBook.setPublishTime(2010); Intent mIntent = new Intent(this,ObjectTranDemo2.class); Bundle mBundle = new Bundle(); mBundle.putParcelable(PAR_KEY, mBook); mIntent.putExtras(mBundle); startActivity(mIntent); } //铵钮点击事件响应 public void onClick(View v) { if(v == sButton){ SerializeMethod(); }else{ PacelableMethod(); } } }

ObjectTranDemo1.java:

[java] view plain copy print ?
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassObjectTranDemo1extendsActivity{@OverridepublicvoidonCreate(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);}}
package com.tutor.objecttran; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ObjectTranDemo1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView mTextView = new TextView(this); Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY); mTextView.setText("You name is: " + mPerson.getName() + "/n"+ "You age is: " + mPerson.getAge()); setContentView(mTextView); } }

ObjectTranDemo2.java:

[java] view plain copy print ?
  1. 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);}}
package com.tutor.objecttran; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ObjectTranDemo2 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView mTextView = new TextView(this); Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+ "Author is: " + mBook.getAuthor() + "/n" + "PublishTime is: " + mBook.getPublishTime()); setContentView(mTextView); } }

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

[xhtml] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/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>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tutor.objecttran" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ObjectTranDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ObjectTranDemo1"></activity> <activity android:name=".ObjectTranDemo2"></activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest>

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

效果1:首界面:


效果2:点击Serializable按钮


效果3:点击Parcelable按钮:


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

更多相关文章

  1. Android开发易错点总结
  2. [置顶] Android(安卓)调用js,传对象到js里面使用addJavascriptInt
  3. Android上在两个Activity之间传递Bitmap对象
  4. Android(安卓)WebView中javascript和java的互相调用
  5. Android滚动多TAB悬浮头效果
  6. Android(安卓)实现文件上传功能(upload)
  7. Android从代码到apk的编译过程
  8. Android的垃圾回收机制(android refbase类(sp wp))
  9. Android(安卓)4.0 Space和Gridlayout

随机推荐

  1. vs2010下vc调用sqlite3数据库以及配置
  2. 如何在drupal视图中添加DISTINCT,GROUP BY
  3. 如何使用来自其他模型的信息来注释查询集
  4. 连接SQLServer时提示“但是在登录前的握
  5. MySQL数据操作之多表查询
  6. mysql cluster的常见问题
  7. MYSQL存储过程,函数,光标
  8. mysql转存sql脚本的时候怎么取消外键
  9. ssh项目 com.mchange.v2.c3p0.impl.NewPr
  10. PostgreSQL 高级特性入门篇