您的位置:首页 > 移动开发 > Android开发

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

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

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



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

[java]
view plaincopy

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

[java]
view plaincopy

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:

[javascript]
view plaincopy

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:

[java]
view plaincopy

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:

[java]
view plaincopy

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:

[java]
view plaincopy

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

[java]
view plaincopy

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java android 对象
相关文章推荐