Android中Intent傳遞對象的兩種方法(Serializable,Parcelable)

來源:互聯網
上載者:User

 


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

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

 

第二步:修改main.xml布局檔案(這裡我增加了兩個按鈕)代碼如下

  to clipboardprint?<?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:

 

 to clipboardprint?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:

 

 to clipboardprint?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:

 
  to clipboardprint?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:

 

  to clipboardprint?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:

 

 to clipboardprint?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行):

 

  to clipboardprint?<?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按鈕:

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.