1. 程式人生 > >Android中Intent傳遞物件的兩種方法(Serializable,Parcelable)

Android中Intent傳遞物件的兩種方法(Serializable,Parcelable)

今天要給大家講一下Android中Intent中如何傳遞物件,就我目前所知道的有兩種方法,一種是Bundle.putSerializable(Key,Object);另一種是Bundle.putParcelable(Key, Object);當然這些Object是有一定的條件的,前者是實現了Serializable介面,而後者是實現了Parcelable介面,為了讓大家更容易理解我還是照常寫了一個簡單的Demo,大家就一步一步跟我來吧!

第一步:新建一個Android工程命名為ObjectTranDemo(類比較多哦!)目錄結構如下圖:

第二步:修改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 com.tutor.objecttran;  
  2. import java.io.Serializable;  
  3. publicclass Person implements Serializable {  
  4.     privatestaticfinallong serialVersionUID = -7060210544600464481L;   
  5.     private String name;  
  6.     privateint age;  
  7.     public String getName() {  
  8.         return name;  
  9.     }  
  10.     publicvoid setName(String name) {  
  11.         this.name = name;  
  12.     }  
  13.     publicint getAge() {  
  14.         return age;  
  15.     }  
  16.     publicvoid setAge(int age) {  
  17.         this.age = age;  
  18.     }  
  19. }  

Book.java:

  1. package com.tutor.objecttran;  
  2. import android.os.Parcel;  
  3. import android.os.Parcelable;  
  4. publicclass Book implements Parcelable {  
  5.     private String bookName;  
  6.     private String author;  
  7.     privateint publishTime;  
  8.     public String getBookName() {  
  9.         return bookName;  
  10.     }  
  11.     publicvoid setBookName(String bookName) {  
  12.         this.bookName = bookName;  
  13.     }  
  14.     public String getAuthor() {  
  15.         return author;  
  16.     }  
  17.     publicvoid setAuthor(String author) {  
  18.         this.author = author;  
  19.     }  
  20.     publicint getPublishTime() {  
  21.         return publishTime;  
  22.     }  
  23.     publicvoid setPublishTime(int publishTime) {  
  24.         this.publishTime = publishTime;  
  25.     }  
  26.     publicstaticfinal 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.             returnnew Book[size];  
  36.         }  
  37.     };  
  38.     publicint describeContents() {  
  39.         return 0;  
  40.     }  
  41.     publicvoid writeToParcel(Parcel parcel, int flags) {  
  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. package com.tutor.objecttran;  
  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. publicclass ObjectTranDemo extends Activity implements OnClickListener {  
  9.     private Button sButton,pButton;  
  10.     publicfinalstatic String SER_KEY = "com.tutor.objecttran.ser";  
  11.     publicfinalstatic String PAR_KEY = "com.tutor.objecttran.par";  
  12.     publicvoid onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);     
  15.         setupViews();  
  16.     }  
  17.     //我的一貫作風呵呵
  18.     publicvoid setupViews(){  
  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.     publicvoid SerializeMethod(){  
  26.         Person mPerson = new Person();  
  27.         mPerson.setName("frankie");  
  28.         mPerson.setAge(25);  
  29.         Intent mIntent = new Intent(this,ObjectTranDemo1.class);  
  30.         Bundle mBundle = new Bundle();  
  31.         mBundle.putSerializable(SER_KEY,mPerson);  
  32.         mIntent.putExtras(mBundle);  
  33.         startActivity(mIntent);  
  34.     }  
  35.     //Pacelable傳遞物件方法
  36.     publicvoid PacelableMethod(){  
  37.         Book mBook = new Book();  
  38.         mBook.setBookName("Android Tutor");  
  39.         mBook.setAuthor("Frankie");  
  40.         mBook.setPublishTime(2010);  
  41.         Intent mIntent = new Intent(this,ObjectTranDemo2.class);  
  42.         Bundle mBundle = new Bundle();  
  43.         mBundle.putParcelable(PAR_KEY, mBook);  
  44.         mIntent.putExtras(mBundle);  
  45.         startActivity(mIntent);  
  46.     }  
  47.     //銨鈕點選事件響應
  48.     publicvoid onClick(View v) {  
  49.         if(v == sButton){  
  50.             SerializeMethod();  
  51.         }else{  
  52.             PacelableMethod();  
  53.         }  
  54.     }  
  55. }  

ObjectTranDemo1.java:

  1. package com.tutor.objecttran;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;  
  5. publicclass ObjectTranDemo1 extends Activity {  
  6.     @Override
  7.     publicvoid 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. }  

ObjectTranDemo2.java:

  1. package com.tutor.objecttran;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;  
  5. publicclass ObjectTranDemo2 extends Activity {  
  6.     publicvoid 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. }  

第五步:比較重要的一步啦,修改AndroidManifest.xml檔案(將兩個新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下程式碼如下(第14,15行):

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

第六步:執行上述工程檢視效果圖啦:

效果1:首介面:

效果2:點選Serializable按鈕

效果3:點選Parcelable按鈕: