`
心雨心
  • 浏览: 355848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android中Intent传递对象的两种方法(Serializable,Parcelable)

阅读更多

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

  第一步:新建一个Android工程命名为ObjectTranDemo:

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

  view plaincopy 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>

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

  }

  }

  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 CREATOR = new Creator() {

  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);

  }

  }

  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 CREATOR = new Creator() {

  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();

  }

  }

  }

  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:

  view plaincopy 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() + ""+

  "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 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() + ""+

  "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()+""+

  "Author is: " + mBook.getAuthor() + "" +

  "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 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()+""+

  "Author is: " + mBook.getAuthor() + "" +

  "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">

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

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

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

 

分享到:
评论

相关推荐

    android中Intent传递对象的两种方法(Serializable,Parcelable)

    当我们需要在Intent中传递复杂对象时,有两种主要的方法:Serializable和Parcelable。这两种方式都可以实现对象的序列化,但它们在性能和效率上存在差异。 **Serializable接口** Serializable接口是Java提供的一个...

    Android中Intent传递对象的两种方法Serializable,Parcelable

    总结来说,当需要在Intent中传递自定义对象时,应优先考虑使用Parcelable接口,以提高性能和减少内存开销。只有在不关心性能,或者需要简化实现(如数据持久化)的情况下,才选择使用Serializable接口。在实际开发中...

    Android Intent传递数据大小限制详解

    Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat...

    Intent传递对象Serializable

    以上就是使用Serializable接口在Intent中传递对象的基本操作和注意事项。在实际开发中,根据项目需求和性能要求,选择合适的对象传递方式是非常重要的。在提供的Android_project_Serializable项目中,你可以找到相关...

    android Intent传递对象数据

    - **优点**:性能优秀,是Android系统推荐的传递对象的方式,因为它在内存和时间效率上都优于`Serializable`。 - **缺点**:实现过程相对复杂,需要手动处理每个字段的序列化和反序列化。 ### 结论 对于简单的对象...

    Intent传递对象之Serializable和Parcelable的区别

    Intent在不同的组件中传递对象数据的应用非常普遍,大家都知道在intent传递对象的方法有两种:1、实现Serializable接口、2、实现Parcelable接口。 Android中Intent传递对象的两种方法Serializable,Parcelable请点击...

    Android系列之Intent传递对象的几种实例方法

    本篇文章将详细探讨如何通过Intent在Android中传递对象,主要分为两种方式:使用`Serializable`接口和`Parcelable`接口。 1. **Serializable接口** `Serializable`是Java提供的一个标准序列化接口,当一个类实现了...

    Android 通过Intent使用Bundle传递对象详细介绍

    Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable Java中...

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

    Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle....

    Android Intent传递对象

    "Android Intent传递对象"这个主题主要关注如何利用Intent来传递自定义对象,以便在应用程序的不同部分共享数据。下面我们将深入探讨这个话题。 首先,了解Intent的基本结构和类型至关重要。Intent有两种类型:显式...

    Android 数据传递(Intent、Bundle、Serializable、Parcelable等)

    本篇文章将深入探讨四种主要的数据传递方式:Intent、Bundle、Serializable以及Parcelable。 1. **Intent**: Intent是Android中的一个核心概念,用于表示一个操作的意图,可以用来启动一个新的Activity或Service。...

    Intent传递对象、对象数组

    总结,Intent在Android开发中扮演着核心角色,通过实现Parcelable接口,我们可以顺利地在Intent中传递对象和对象数组,实现不同组件之间的数据交互。在实际开发中,根据具体需求和性能要求选择合适的数据传递方式。

    Intent传递对象

    本篇文章将深入探讨如何通过Intent传递对象,以及涉及到的序列化方式——Serializable和Parcelable。 首先,Intent主要分为显式Intent和隐式Intent。显式Intent明确指定要启动的目标组件,而隐式Intent则通过ACTION...

    Android序列化——Serializable与Parcelable

    - 当你需要在Intent中传递大量数据时,推荐使用Parcelable,因为Intent的传输性能直接影响到应用的响应速度。 - 对于简单的数据存储和恢复,如保存Activity状态,Serializable就足够了,因为实现简单且能满足需求。 ...

    android 传递对象

    Android提供了多种方式来传递对象,包括Intent、Bundle、Parcelable、Serializable等。下面将详细讲解这些方法及其适用场景。 首先,Intent是Android系统用来启动Activity或Service的主要手段,同时也支持传递数据...

Global site tag (gtag.js) - Google Analytics