Intent之对象传递(Serializable传递对象和对象集合)

Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象。

要求被传递的对象必须实现上述2种接口中的一种才能通过Intent直接传递。

Intent中传递这2种对象的方法:

?
1
2
3
Bundle.putSerializable(Key,Object);  //实现Serializable接口的对象
 
Bundle.putParcelable(Key, Object); //实现Parcelable接口的对象

一、传递对象

假设由登录界面(Login)跳转到主界面(MainActivity)传递的对象为登录的用户信息 User类

1.首先创建一个序列化类:User

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.yayun.demo;
 
import java.io.Serializable;
 
import android.R.integer;
 
public class User implements Serializable {
     private String name;
     private int level;
 
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this .name = name;
     }
     public int getLevel() {
         return level;
     }
     public void setLevel( int level) {
         this .level = level;
     }
     public User(String name, int level) {
         this .name=name;
         this .level=level;
     }
     
}


注意点,类实现Serializable接口

2.布局文件很简单,main.xml中一个Button,login.xml中一个TextView:

?
1
2
<!--?xml version= 1.0 encoding=utf- 8 ?-->
<linearlayout android:layout_height= "fill_parent" android:layout_width= "fill_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" ><button android:id= "@+id/btn" android:layout_height= "wrap_content" android:layout_width= "fill_parent" android:text= "登录" ></button></linearlayout>
?
1
2
3
4
5
6
<!--?xml version= 1.0 encoding=utf- 8 ?-->
<linearlayout android:layout_height= "fill_parent" android:layout_width= "fill_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" >
 
     <textview android:id= "@+id/text" android:layout_height= "wrap_content" android:layout_width= "fill_parent" android:text= "/" >
 
</textview></linearlayout>


3.MainActivity.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package org.yayun.demo;
 
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 MainActivity extends Activity {
     private Button button;
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState); // 生命周期方法
         super .setContentView(R.layout.main); // 设置要使用的布局管理器
     button=(Button)findViewById(R.id.btn);
     button.setOnClickListener( new OnClickListener() {
         
         public void onClick(View v) {
             User user= new User(yayun, 7 ); //实例化对象
             Intent intent= new Intent();
             intent.setClass(MainActivity. this , LoginActivity. class );
             Bundle bundle= new Bundle();
             bundle.putSerializable(user, user); //序列化
             intent.putExtras(bundle); //发送数据
             startActivity(intent); //启动intent
             
         }
     });
 
     }
}


4.接收Activity--LoginActivity.java:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package org.yayun.demo;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
public class LoginActivity extends Activity {
     private TextView textView;
 
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState); // 生命周期方法
         super .setContentView(R.layout.login); // 设置要使用的布局管理器
         textView = (TextView) findViewById(R.id.text);
         Intent intent = this .getIntent();
         User user = (User) intent.getSerializableExtra(user);
         textView.setText(用户名: + user.getName() + 用户等级
                 + String.valueOf(user.getLevel()));
 
     }
}


5.运行实例如下:

\

\

可以看出,对象已经成功传过来了!

二、传递对象集合

1.布局文件没有改变,我们看一下MainActivity.java:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package org.yayun.demo;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
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 MainActivity extends Activity {
     private Button button;
     List<user> list= new ArrayList<user>();
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState); // 生命周期方法
         super .setContentView(R.layout.main); // 设置要使用的布局管理器
     button=(Button)findViewById(R.id.btn);
     button.setOnClickListener( new OnClickListener() {
         
         public void onClick(View v) {
             User user1= new User(yayun, 7 ); //实例化对象
             User user2= new User(feifei, 9 );
             list.add(user1);
             list.add(user2);
             Intent intent= new Intent();
             intent.setClass(MainActivity. this , LoginActivity. class );
             Bundle bundle= new Bundle();
             bundle.putSerializable(list,(Serializable)list); //序列化,要注意转化(Serializable)
             intent.putExtras(bundle); //发送数据
             startActivity(intent); //启动intent
             
         }
     });
 
     }
}</user></user>


2.看一下接收Activity--LoginActivity.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package org.yayun.demo;
 
import java.util.List;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
public class LoginActivity extends Activity {
     private TextView textView;
     List<user> list;
 
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState); // 生命周期方法
         super .setContentView(R.layout.login); // 设置要使用的布局管理器
         textView = (TextView) findViewById(R.id.text);
         Intent intent = this .getIntent();
         list = (List<user>) intent.getSerializableExtra(list); //获取list方式
         User user1=list.get( 0 );
         User user2=list.get( 1 );
         textView.setText(用户名: + user2.getName() + 用户等级
                 + String.valueOf(user2.getLevel()));
 
     }
}</user></user>


3.运行实例:

\

\

我们看出,已经从对象集合中取出对象了!

总结

1.Bundle.putSerializable(Key,Object); //实现Serializable接口的对象;

2.获取对象User user = (User) intent.getSerializableExtra(user);

3.bundle.putSerializable(list,(Serializable)list);//对象集合存入方式;

4.list = (List) intent.getSerializableExtra(list);//获取对象集合list方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值