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

来源:互联网 发布:windows media 解码器 编辑:程序博客网 时间:2024/05/28 05:16

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
packageorg.yayun.demo;
 
importjava.io.Serializable;
 
importandroid.R.integer;
 
publicclass User implementsSerializable {
    privateString name;
    privateint level;
 
    publicString getName() {
        returnname;
    }
    publicvoid setName(String name) {
        this.name = name;
    }
    publicint getLevel() {
        returnlevel;
    }
    publicvoid setLevel(intlevel) {
        this.level = level;
    }
    publicUser(String name,intlevel) {
        this.name=name;
        this.level=level;
    }
     
}


注意点,类实现Serializable接口

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

?
1
2
<!--?xml version=1.0encoding=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.0encoding=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
packageorg.yayun.demo;
 
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
 
publicclass MainActivity extendsActivity {
    privateButton button;
    publicvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);// 生命周期方法
        super.setContentView(R.layout.main);// 设置要使用的布局管理器
    button=(Button)findViewById(R.id.btn);
    button.setOnClickListener(newOnClickListener() {
         
        publicvoid onClick(View v) {
            User user=newUser(yayun, 7);//实例化对象
            Intent intent=newIntent();
            intent.setClass(MainActivity.this, LoginActivity.class);
            Bundle bundle=newBundle();
            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
packageorg.yayun.demo;
 
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.widget.TextView;
 
publicclass LoginActivity extendsActivity {
    privateTextView textView;
 
    publicvoid 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.运行实例如下:

\

免费下载-安易数据恢复软件
【点击进入】
AneData全能文件恢复,超强数据恢复工具 硬盘移动硬盘SD卡U盘相机手机内存卡全支持

\

用友办公软件北京销售62416361
【点击进入】
专业的团队为您提供优质的的用友咨询服务 飞鸿至达订购电话18611850591

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

二、传递对象集合

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
packageorg.yayun.demo;
 
importjava.io.Serializable;
importjava.util.ArrayList;
importjava.util.List;
 
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
 
publicclass MainActivity extendsActivity {
    privateButton button;
    List<user> list=newArrayList<user>();
    publicvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);// 生命周期方法
        super.setContentView(R.layout.main);// 设置要使用的布局管理器
    button=(Button)findViewById(R.id.btn);
    button.setOnClickListener(newOnClickListener() {
         
        publicvoid onClick(View v) {
            User user1=newUser(yayun, 7);//实例化对象
            User user2=newUser(feifei, 9);
            list.add(user1);
            list.add(user2);
            Intent intent=newIntent();
            intent.setClass(MainActivity.this, LoginActivity.class);
            Bundle bundle=newBundle();
            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
packageorg.yayun.demo;
 
importjava.util.List;
 
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.widget.TextView;
 
publicclass LoginActivity extendsActivity {
    privateTextView textView;
    List<user> list;
 
    publicvoid 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.运行实例:

\

用友办公软件北京销售62416361
【点击进入】
专业的团队为您提供优质的的用友咨询服务 飞鸿至达订购电话18611850591

\

免费下载-安易数据恢复软件
【点击进入】
AneData全能文件恢复,超强数据恢复工具 硬盘移动硬盘SD卡U盘相机手机内存卡全支持

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

总结

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
原创粉丝点击