Android系列之Intent传递对象的两种方法

在Android中intent传递对象主要有2种方式分别是,Bundle.putSerializable(Key,Object)和Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,以下是我为大家做的一个实例

首先我们建立一个工程项目命名为:ObjectTestDemo

然后我们再修改main.xml布局文件,主要增加2个按钮

 

代码
   
     
1 view plaincopy to clipboardprint ?
2
3    < ? xml version = " 1.0 " encoding = " utf-8 " ?>
4
5    < LinearLayout xmlns:android = " http://schemas.android.com/apk/res/android "
6
7   android:orientation = " vertical "
8
9   android:layout_width = " fill_parent "
10
11   android:layout_height = " fill_parent "
12
13    >
14
15    < TextView
16
17   android:layout_width = " fill_parent "
18
19   android:layout_height = " wrap_content "
20
21   android:text = " Welcome to Mr Jesson's blog. "
22
23    />
24
25    < Button
26
27   android:id = " @+id/button1 "
28
29   android:layout_width = " fill_parent "
30
31   android:layout_height = " wrap_content "
32
33   android:text = " Serializable "
34
35    />
36
37    < Button
38
39   android:id = " @+id/button2 "
40
41   android:layout_width = " fill_parent "
42
43   android:layout_height = " wrap_content "
44
45   android:text = " Parcelable "
46
47    />
48
49    < / LinearLayout >
50
51    < ? xml version = " 1.0 " encoding = " utf-8 " ?>
52
53    < LinearLayout xmlns:android = " http://schemas.android.com/apk/res/android "
54
55   android:orientation = " vertical "
56
57   android:layout_width = " fill_parent "
58
59   android:layout_height = " fill_parent "
60
61    >
62
63    < TextView
64
65   android:layout_width = " fill_parent " android:layout_height = " wrap_content "
66
67   android:text = " Welcome to Mr jesson's blog. "
68
69    />
70
71    < Button
72
73   android:id = " @+id/button1 "
74
75   android:layout_width = " fill_parent "
76
77   android:layout_height = " wrap_content "
78
79   android:text = " Serializable "
80
81    />
82
83    < Button
84
85   android:id = " @+id/button2 "
86
87   android:layout_width = " fill_parent "
88
89   android:layout_height = " wrap_content "
90
91   android:text = " Parcelable "
92
93    />
94
95    < / LinearLayout >
96  

接下来我们开始对工程进行实现,分别建立Person.java实现Serializable接口,另一个Book.java实现Parcelable接口

 

代码
   
     
1 package com.test.objecttran;
2
3    import java.io.Serializable;
4
5    public class Person implements Serializable {
6
7    private static final long serialVersionUID = - 7060210544600464481L ;
8
9    private String name;
10
11    private int age;
12
13    public String getName() {
14
15    return name;
16
17   }
18
19    public void setName(String name) {
20
21    this .name = name;
22
23   }
24
25    public int getAge() {
26
27    return age;
28
29   }
30
31    public void setAge( int age) {
32
33    this .age = age;
34
35   }
36
37   }
38

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import java.io.Serializable;
4
5    public class Person implements Serializable {
6
7    private static final long serialVersionUID = - 7060210544600464481L ;
8
9    private String name;
10
11    private int age;
12
13    public String getName() {
14
15    return name;
16
17   }
18
19    public void setName(String name) {
20
21    this .name = name;
22
23   }
24
25    public int getAge() {
26
27    return age;
28
29   }
30
31    public void setAge( int age) {
32
33    this .age = age;
34
35   }
36
37   }
38

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3
4
5   import android.os.Parcel;
6
7    import android.os.Parcelable;
8
9    public class Book implements Parcelable {
10
11    private String bookName;
12
13    private String author;
14
15    private int publishTime;
16
17    public String getBookName() {
18
19    return bookName;
20
21   }
22
23    public void setBookName(String bookName) {
24
25    this .bookName = bookName;
26
27   }
28
29    public String getAuthor() {
30
31    return author;
32
33   }
34
35    public void setAuthor(String author) {
36
37    this .author = author;
38
39   }
40
41    public int getPublishTime() {
42
43    return publishTime;
44
45   }
46
47    public void setPublishTime( int publishTime) {
48
49    this .publishTime = publishTime;
50
51   }
52
53    public static final Parcelable.Creator CREATOR = new Creator() {
54
55    public Book createFromParcel(Parcel source) {
56
57   Book mBook = new Book();
58
59   mBook.bookName = source.readString();
60
61   mBook.author = source.readString();
62
63   mBook.publishTime = source.readInt();
64
65    return mBook;
66
67   }
68
69    public Book[] newArray( int size) {
70
71    return new Book[size];
72
73   }
74
75   };
76
77    public int describeContents() {
78
79    return 0 ;
80
81   }
82
83    public void writeToParcel(Parcel parcel, int flags) {
84
85   parcel.writeString(bookName);
86
87   parcel.writeString(author);
88
89   parcel.writeInt(publishTime);
90
91   }
92
93   }
94

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import android.os.Parcel;
4
5    import android.os.Parcelable;
6
7    public class Book implements Parcelable {
8
9    private String bookName;
10
11    private String author;
12
13    private int publishTime;
14
15    public String getBookName() {
16
17    return bookName;
18
19   }
20
21    public void setBookName(String bookName) { this .bookName = bookName;
22
23   }
24
25    public String getAuthor() {
26
27    return author;
28
29   }
30
31    public void setAuthor(String author) {
32
33    this .author = author;
34
35   }
36
37    public int getPublishTime() {
38
39    return publishTime;
40
41   }
42
43    public void setPublishTime( int publishTime) {
44
45    this .publishTime = publishTime;
46
47   }
48
49    public static final Parcelable.Creator CREATOR = new Creator() {
50
51    public Book createFromParcel(Parcel source) {
52
53   Book mBook = new Book();
54
55   mBook.bookName = source.readString();
56
57   mBook.author = source.readString();
58
59   mBook.publishTime = source.readInt();
60
61    return mBook;
62
63   }
64
65    public Book[] newArray( int size) {
66
67    return new Book[size];
68
69   }
70
71   };
72
73    public int describeContents() {
74
75    return 0 ;
76
77   }
78
79    public void writeToParcel(Parcel parcel, int flags) {
80
81   parcel.writeString(bookName);
82
83   parcel.writeString(author);
84
85   parcel.writeInt(publishTime);
86
87   }
88
89   }
90

 

修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4
5    import android.content.Intent;
6
7    import android.os.Bundle;
8
9    import android.view.View;
10
11    import android.view.View.OnClickListener;
12
13    import android.widget.Button;
14
15    public class ObjectTranDemo extends Activity implements OnClickListener {
16
17    private Button sButton,pButton;
18
19    public final static String SER_KEY = " com.tutor.objecttran.ser " ;
20
21    public final static String PAR_KEY = " com.tutor.objecttran.par " ;
22
23 public void onCreate(Bundle savedInstanceState) {
24
25    super .onCreate(savedInstanceState);
26
27   setContentView(R.layout.main);
28
29   setupViews();
30
31   }
32
33
34    public void setupViews(){
35
36   sButton = (Button)findViewById(R.id.button1);
37
38   pButton = (Button)findViewById(R.id.button2);
39
40   sButton.setOnClickListener( this );
41
42   pButton.setOnClickListener( this );
43
44   }
45
46    // Serializeable传递对象的方法
47
48    public void SerializeMethod(){
49
50   Person mPerson = new Person();
51
52   mPerson.setName( " frankie " );
53
54   mPerson.setAge( 25 );
55
56   Intent mIntent = new Intent( this ,ObjectTranDemo1. class );
57
58   Bundle mBundle = new Bundle();
59
60   mBundle.putSerializable(SER_KEY,mPerson);
61
62   mIntent.putExtras(mBundle);
63
64   startActivity(mIntent);
65
66   }
67
68    // Pacelable传递对象方法
69
70    public void PacelableMethod(){
71
72   Book mBook = new Book();
73
74   mBook.setBookName( " Android Tutor " );
75
76   mBook.setAuthor( " Frankie " );
77
78   mBook.setPublishTime( 2010 );
79
80   Intent mIntent = new Intent( this ,ObjectTranDemo2. class );
81
82   Bundle mBundle = new Bundle();
83
84   mBundle.putParcelable(PAR_KEY, mBook);
85
86   mIntent.putExtras(mBundle);
87
88   startActivity(mIntent);
89
90   }
91
92    // 铵钮点击事件响应
93
94    public void onClick(View v) {
95
96    if (v == sButton){
97
98   SerializeMethod();
99
100   } else {
101
102   PacelableMethod();
103
104   }
105
106   }
107
108   }
109

 

代码
   
     
1   package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4
5    import android.content.Intent;
6
7    import android.os.Bundle;
8
9    import android.view.View;
10
11    import android.view.View.OnClickListener;
12
13    import android.widget.Button;
14
15    public class ObjectTranDemo extends Activity implements OnClickListener {
16
17
18
19    private Button sButton,pButton;
20
21    public final static String SER_KEY = " com.tutor.objecttran.ser " ;
22
23    public final static String PAR_KEY = " com.tutor.objecttran.par " ;
24
25    public void onCreate(Bundle savedInstanceState) {
26
27    super .onCreate(savedInstanceState);
28
29   setContentView(R.layout.main);
30
31   setupViews();
32
33   }
34
35    public void setupViews(){
36
37   sButton = (Button)findViewById(R.id.button1);
38
39   pButton = (Button)findViewById(R.id.button2);
40
41   sButton.setOnClickListener( this );
42
43   pButton.setOnClickListener( this );
44
45   }
46
47    // Serializeable传递对象的方法
48
49    public void SerializeMethod(){
50
51   Person mPerson = new Person();
52
53   mPerson.setName( " frankie " );
54
55   mPerson.setAge( 25 );
56
57   Intent mIntent = new Intent( this ,ObjectTranDemo1. class );
58
59   Bundle mBundle = new Bundle();
60
61   mBundle.putSerializable(SER_KEY,mPerson);
62
63   mIntent.putExtras(mBundle);
64
65   startActivity(mIntent);
66
67   }
68
69    // Pacelable传递对象方法
70
71    public void PacelableMethod(){
72
73   Book mBook = new Book();
74
75   mBook.setBookName( " Android Tutor " );
76
77   mBook.setAuthor( " Frankie " );
78
79   mBook.setPublishTime( 2010 );
80
81   Intent mIntent = new Intent( this ,ObjectTranDemo2. class );
82
83   Bundle mBundle = new Bundle();
84
85   mBundle.putParcelable(PAR_KEY, mBook);
86
87   mIntent.putExtras(mBundle);
88
89   startActivity(mIntent);
90
91   }
92
93    // 铵钮点击事件响应
94
95    public void onClick(View v) {
96
97    if (v == sButton){
98
99   SerializeMethod();
100
101   } else {
102
103   PacelableMethod();
104
105   }
106
107   }
108
109   }
110

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4 import android.os.Bundle;
5   import android.widget.TextView;
6
7    public class ObjectTranDemo1 extends Activity {
8
9   @Override
10
11    public void onCreate(Bundle savedInstanceState) {
12
13    super .onCreate(savedInstanceState);
14
15   TextView mTextView = new TextView( this );
16
17   Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);
18
19   mTextView.setText( " You name is: " + mPerson.getName() + "" +
20
21    " You age is: " + mPerson.getAge());
22
23   setContentView(mTextView);
24
25   }
26
27   }
28

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4
5    import android.os.Bundle;
6
7    import android.widget.TextView;
8
9    public class ObjectTranDemo1 extends Activity {
10
11   @Override
12
13    public void onCreate(Bundle savedInstanceState) {
14
15    super .onCreate(savedInstanceState);
16
17   TextView mTextView = new TextView( this );
18
19   Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);
20
21   mTextView.setText( " You name is: " + mPerson.getName() + "" +
22
23    " You age is: " + mPerson.getAge());
24
25   setContentView(mTextView);
26
27   }
28
29   }
30

 

代码
   
     
1 package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4
5    import android.os.Bundle;
6
7    import android.widget.TextView;
8
9    public class ObjectTranDemo2 extends Activity {
10
11    public void onCreate(Bundle savedInstanceState) {
12
13    super .onCreate(savedInstanceState);
14
15   TextView mTextView = new TextView( this );
16
17   Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);
18
19   mTextView.setText( " Book name is: " + mBook.getBookName() + "" +
20
21    " Author is: " + mBook.getAuthor() + "" +
22
23    " PublishTime is: " + mBook.getPublishTime()); setContentView(mTextView);
24
25   }
26
27   }
28

 

代码
   
     
1   package com.test.tutor.objecttran;
2
3    import android.app.Activity;
4
5    import android.os.Bundle;
6
7    import android.widget.TextView;
8
9    public class ObjectTranDemo2 extends Activity {
10
11    public void onCreate(Bundle savedInstanceState) {
12
13    super .onCreate(savedInstanceState);
14
15   TextView mTextView = new TextView( this );
16
17   Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);
18
19   mTextView.setText( " Book name is: " + mBook.getBookName() + "" +
20
21    " Author is: " + mBook.getAuthor() + "" +
22
23    " PublishTime is: " + mBook.getPublishTime());
24
25   setContentView(mTextView);
26
27   }
28
29   }
30

 

下面是最重要的环节:修改AndroidManifest.xml文件(将两个新增的Activity,ObjecttestDemo1,ObjecttestDemo2)申明一下代码如下(第14,15行):

 

代码
   
     
1    < ?xml version ="1.0" encoding ="utf-8" ? >
2
3    < manifest xmlns:android ="http://schemas.android.com/apk/res/android"
4
5   package ="com.test.tutor.objecttran"
6
7   android:versionCode ="1"
8
9   android:versionName ="1.0" >
10
11    < application android:icon ="@drawable/icon" android:label ="@string/app_name" >
12
13    < activity android:name =".ObjectTranDemo"
14
15   android:label ="@string/app_name" >
16
17    < intent-filter >
18
19    < action android:name ="android.intent.action.MAIN" />
20
21    < category android:name ="android.intent.category.LAUNCHER" />
22
23    < /intent-filter >
24
25    < /activity >
26
27    < activity android:name =".ObjecttestDemo1" >< /activity >
28
29    < activity android:name =".ObjecttestDemo2" >< /activity >
30
31    < /application >
32
33    < uses-sdk android:minSdkVersion ="7" />
34
35    < /manifest >
36
37    < ?xml version ="1.0" encoding ="utf-8" ? >
38
39   < manifest xmlns:android ="http://schemas.android.com/apk/res/android"
40
41   package ="com.test.tutor.objecttran"
42
43   android:versionCode ="1"
44
45   android:versionName ="1.0" >
46
47    < application android:icon ="@drawable/icon" android:label ="@string/app_name" >
48
49    < activity android:name =".ObjectTranDemo"
50
51   android:label ="@string/app_name" >
52
53    < intent-filter >
54
55    < action android:name ="android.intent.action.MAIN" />
56
57    < category android:name ="android.intent.category.LAUNCHER" />
58
59    < /intent-filter >
60
61    < /activity >
62
63    < activity android:name =".ObjecttestDemo1" >< /activity >
64
65    < activity android:name =".ObjecttestDemo2" >< /activity >
66
67    < /application >
68
69    < uses-sdk android:minSdkVersion ="7" />
70
71    < /manifest >
72

 再接下来就是编译,运行看效果了哈!!!

你可能感兴趣的:(android)