Android高手进阶教程(十七)之---An…

来源:互联网 发布:linux 内核文件丢失 编辑:程序博客网 时间:2024/06/10 03:06

Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

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

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

 

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下view plaincopy toclipboardprint?
<?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>  
<?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:

view plaincopy to clipboardprint?
packagecom.tutor.objecttran;  
importjava.io.Serializable;  
public class Person implements Serializable{  
    privatestatic final long serialVersionUID =-7060210544600464481L;   
    privateString name;  
    private intage;  
    publicString getName() {  
       return name;  
    
    public voidsetName(String name) {  
       this.name = name;  
    
    public intgetAge() {  
       return age;  
    
    public voidsetAge(int age) {  
       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:

view plaincopy to clipboardprint?
packagecom.tutor.objecttran;  
import android.os.Parcel;  
importandroid.os.Parcelable;  
public class Book implements Parcelable{  
    privateString bookName;  
    privateString author;  
    private intpublishTime;  
      
    publicString getBookName() {  
       return bookName;  
    
    public voidsetBookName(String bookName){  
       this.bookName = bookName;  
    
    publicString getAuthor() {  
       return author;  
    
    public voidsetAuthor(String author){  
       this.author = author;  
    
    public intgetPublishTime() {  
       return publishTime;  
    
    public voidsetPublishTime(int publishTime){  
       this.publishTime =publishTime;  
    
      
    publicstatic 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 intdescribeContents() {  
       return 0;  
    
    public voidwriteToParcel(Parcel parcel, int flags){  
       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 finalParcelable.Creator<Book> CREATOR =new Creator<Book>() {
  public BookcreateFromParcel(Parcel source) {
   Book mBook =new Book();
   mBook.bookName= source.readString();
   mBook.author= source.readString();
   mBook.publishTime= source.readInt();
   returnmBook;
  }
  public Book[] newArray(intsize) {
   return newBook[size];
  }
 };
 
 public int describeContents() {
  return 0;
 }
 public void writeToParcel(Parcel parcel, 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;  
import android.os.Bundle;  
import android.view.View;  
importandroid.view.View.OnClickListener;  
importandroid.widget.Button;  
public class ObjectTranDemo extends Activity implementsOnClickListener {  
      
    privateButton sButton,pButton;  
   public  final static String SER_KEY ="com.tutor.objecttran.ser";  
   public  final static String PAR_KEY ="com.tutor.objecttran.par";  
    public voidonCreate(Bundle savedInstanceState){  
       super.onCreate(savedInstanceState);  
       setContentView(R.layout.main);     
       setupViews();  
          
    
      
   //我的一贯作风呵呵  
    public voidsetupViews(){  
       sButton =(Button)findViewById(R.id.button1);  
       pButton =(Button)findViewById(R.id.button2);  
       sButton.setOnClickListener(this);  
       pButton.setOnClickListener(this);  
    
   //Serializeable传递对象的方法  
    public voidSerializeMethod(){  
       Person mPerson = newPerson();  
       mPerson.setName("frankie");  
       mPerson.setAge(25);  
       Intent mIntent = newIntent(this,ObjectTranDemo1.class);  
       Bundle mBundle = newBundle();  
       mBundle.putSerializable(SER_KEY,mPerson);  
       mIntent.putExtras(mBundle);  
          
       startActivity(mIntent);  
    
   //Pacelable传递对象方法  
    public voidPacelableMethod(){  
       Book mBook = new Book();  
       mBook.setBookName("AndroidTutor");  
       mBook.setAuthor("Frankie");  
       mBook.setPublishTime(2010);  
       Intent mIntent = newIntent(this,ObjectTranDemo2.class);  
       Bundle mBundle = newBundle();  
       mBundle.putParcelable(PAR_KEY,mBook);  
       mIntent.putExtras(mBundle);  
          
       startActivity(mIntent);  
    
   //铵钮点击事件响应  
    public voidonClick(View v) {  
       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 implementsOnClickListener {
   
 private Button sButton,pButton;
 public  final static StringSER_KEY = "com.tutor.objecttran.ser";
 public  final static StringPAR_KEY = "com.tutor.objecttran.par";
    public voidonCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);  
       setupViews();
       
    }
   
   //我的一贯作风呵呵
    public voidsetupViews(){
    sButton =(Button)findViewById(R.id.button1);
    pButton =(Button)findViewById(R.id.button2);
    sButton.setOnClickListener(this);
    pButton.setOnClickListener(this);
    }
   //Serializeable传递对象的方法
    public voidSerializeMethod(){
    Person mPerson = new Person();
    mPerson.setName("frankie");
    mPerson.setAge(25);
    Intent mIntent = newIntent(this,ObjectTranDemo1.class);
    Bundle mBundle = new Bundle();
    mBundle.putSerializable(SER_KEY,mPerson);
    mIntent.putExtras(mBundle);
    
    startActivity(mIntent);
    }
   //Pacelable传递对象方法
    public voidPacelableMethod(){
    Book mBook = new Book();
    mBook.setBookName("Android Tutor");
    mBook.setAuthor("Frankie");
    mBook.setPublishTime(2010);
    Intent mIntent = newIntent(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:

view plaincopy to clipboardprint?
packagecom.tutor.objecttran;  
importandroid.app.Activity;  
import android.os.Bundle;  
importandroid.widget.TextView;  
public class ObjectTranDemo1 extends Activity{  
   @Override 
    public voidonCreate(Bundle savedInstanceState){  
       super.onCreate(savedInstanceState);  
          
       TextView mTextView = newTextView(this);  
       Person mPerson =(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);  
       mTextView.setText("You name is: " + mPerson.getName() +"\n"+  
               "You age is: " +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 voidonCreate(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:

view plaincopy to clipboardprint?
packagecom.tutor.objecttran;  
importandroid.app.Activity;  
import android.os.Bundle;  
importandroid.widget.TextView;  
public class ObjectTranDemo2 extends Activity{  
   
    public voidonCreate(Bundle savedInstanceState){  
       super.onCreate(savedInstanceState);  
       TextView mTextView = newTextView(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);  
    

package com.tutor.objecttran;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ObjectTranDemo2 extends Activity {
 
    public voidonCreate(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行):

view plaincopy 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">  
       <activityandroid:name=".ObjectTranDemo" 
                 android:label="@string/app_name">  
           <intent-filter>  
               <action android:name="android.intent.action.MAIN"/>  
               <categoryandroid:name="android.intent.category.LAUNCHER"/>  
           </intent-filter>  
       </activity>  
       <activityandroid:name=".ObjectTranDemo1"></activity>  
       <activityandroid:name=".ObjectTranDemo2"></activity>  
   </application>  
   <uses-sdk android: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"/>
               <categoryandroid:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
  <activityandroid:name=".ObjectTranDemo1"></activity>
  <activityandroid:name=".ObjectTranDemo2"></activity>
   </application>
   <uses-sdk android:minSdkVersion="7"/>
</manifest> 

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

效果1:首界面:

 

效果2:点击Serializable按钮

 

效果3:点击Parcelable按钮:

 

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Android_Tutor/archive/2010/07/16/5740845.aspx

0 0
原创粉丝点击