Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍

所属分类: 软件编程 / Android 阅读数: 30
收藏 0 赞 0 分享

Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍

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

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

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

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

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:

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:

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:

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:

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行):

<?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按钮:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

Android设计登录界面、找回密码、注册功能

这篇文章主要为大家详细介绍了Android设计登录界面的方法,Android实现找回密码、注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android通过手势实现答题器翻页效果

这篇文章主要为大家详细介绍了Android通过手势实现答题器翻页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android采用双缓冲技术实现画板

这篇文章主要为大家详细介绍了Android采用双缓冲技术实现画板的相关资料,思路清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发之毛玻璃效果实例代码

这篇文章主要给大家分享android开发之毛玻璃效果的实例代码,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Android实现桌面悬浮窗、蒙板效果实例代码

这篇文章主要介绍了Android实现桌面悬浮窗、蒙板效果实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解读Android的Volley库的功能结构

这篇文章主要介绍了Android的Volley开发框架的功能结构,Volley是Android开发中网络部分的一大利器,包含很多HTTP协议通信的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中使用Volley库发送HTTP请求的实例教程

这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程,包括创建Volley单例的基本知识与取消Request请求的技巧等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿QQ聊天撒花特效 很真实

本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android的HTTP操作库Volley的基本使用教程

这篇文章主要介绍了Android的HTTP操作库Volley的基本使用教程,包括JSON请求与图片加载等用法的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿水波纹流量球进度条控制器

这篇文章主要介绍了Android仿水波纹流量球进度条控制器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多