• 使用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 来传递对象的功能了。

  • 相关阅读:
    UnxUtils让windows下的dos命令变为linux下的命令
    Python多线程&进程
    Web前端工程师-优秀简历汇总
    最详细的Vuex教程
    Vue2.0 探索之路——生命周期和钩子函数的一些理解
    理解 $nextTick 的作用
    使用git rebase合并多次commit
    vim 退出命令(保存、放弃保存)
    Vue获取DOM元素样式 && 样式更改
    Vue Router的配置
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299561.html
Copyright © 2020-2023  润新知