zoukankan      html  css  js  c++  java
  • 使用Intent传递对象

    Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动、发送广播、启动服务等。在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActivity 中添加如下代码:

        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
        intent.putExtra("string_data", "hello");  
        intent.putExtra("int_data", 100);  
        startActivity(intent);  
    这里调用了Intent 的putExtra()方法来添加要传递的数据,之后在SecondActivity 中就可以得到这些值了,代码如下所示:

        getIntent().getStringExtra("string_data");  
        getIntent().getIntExtra("int_data", 0);  

    但是不知道你有没有发现,putExtra()方法中所支持的数据类型是有限的,虽然常用的一些数据类型它都会支持,但是当你想去传递一些自定义对象的时候就会发现无从下手。不用担心,下面我们就学习一下使用Intent 来传递对象的技巧。

    传递对象有两种方式:1、Serializable 方式;2、Parcelable。由于第一种很简单,这里只介绍第一种方式。

    使用Intent 来传递对象通常有两种实现方式,Serializable 和Parcelable,我们先来学习一下第一种的实现方式。
    Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。至于序列化的方法也很简单,只需要让一个类去实现Serializable 这个接口就可以了。
    比如说有一个Person 类,其中包含了name 和age 这两个字段,想要将它序列化就可以这样写:

    public class Person implements Serializable{  
    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;  
        }  
    } 

    其中get、set 方法都是用于赋值和读取字段数据的,最重要的部分是在第一行。这里让Person 类去实现了Serializable 接口,这样所有的Person 对象就都是可序列化的了。
    接下来在FirstActivity 中的写法非常简单:

        Person person = new Person();  
        person.setName("Tom");  
        person.setAge(20);  
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);  
        intent.putExtra("person_data", person);  
        startActivity(intent);  

    可以看到,这里我们创建了一个Person 的实例,然后就直接将它传入到putExtra()方法中了。由于Person 类实现了Serializable 接口,所以才可以这样写。
    接下来在SecondActivity 中获取这个对象也很简单,写法如下:
        Person person = (Person) getIntent().getSerializableExtra("person_data");  

    这里调用了getSerializableExtra()方法来获取通过参数传递过来的序列化对象,接着再将它向下转型成Person 对象,这样我们就成功实现了使用Intent 来传递对象的功能了。

  • 相关阅读:
    软件测试 测试路径覆盖
    软件测试Lab Junit&Eclemma
    软件项目管理 名词解释
    使用 async/ await 进行 异步 编程
    基于任务的编程模型TAP
    异步编程(二)基于事件的异步编程模式 (EAP)
    C# 异步编程学习(一)
    C# 设计模式
    C# 读取硬盘信息 ManagementClass类
    C# show和showdialog区别
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299561.html
Copyright © 2011-2022 走看看