一、简介

开发过程中,Activity之间传递数据是必不可少的,Android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供了相关的put、set方法,而作为自定义的类型则需要有特别的要求。

自定义类型,想要使用Bundle传递时,需要满足特定的条件,即该类型需要实现Serializable接口或Parcelable接口。

注:如果目标对象中包含其他对象,则被包含的对象也需要实现Serializable接口或Parcelable接口。

二、代码实现

我们以Serializable接口为例:

1、传递对象

1)自定义对象,实现Serializable接口

package com.davis.drawtrangle;import java.io.Serializable;public class Person implements Serializable{        private String name;    private int age;    public Person() {    }    public Person(String name, int age) {        this.name = name;        this.age = 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;    }}

2)使用Intent传递对象

private void clearDrawView(){        Intent intent = new Intent(MainActivity.this, SecondActivity.class);        Person person = new Person("admin", 1);        Bundle bundle = new Bundle();        bundle.putSerializable("person", person);        intent.putExtras(bundle);        startActivity(intent);    }

3)获取传递的数据

private void init(){        Person person = (Person)getIntent().getSerializableExtra("person");        Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());    }

2、传递对象集合

1)同上。

2)同上。

注:使用putSerializable()方法时,需要把List<>强转成为Serializable,并且集合中的成员都需要实现Serializable接口。

private void clearDrawView(){        Intent intent = new Intent(MainActivity.this, MainActivity.class);        List<Person> lists = new ArrayList<Person>();        Person person = new Person("admin", 1);        lists.add(person);        Bundle bundle = new Bundle();        bundle.putSerializable("person", (Serializable) lists);        intent.putExtras(bundle);        startActivity(intent);    }

3)同上。

注:不足之处在于,由于获取数据时候,需要把Serializable强转成为对应的List<>,此处会有警告。

private void init(){        List<Person> lists = (List<Person>)getIntent().getSerializableExtra("person");        for(int i=0;i<lists.size();i++) {            Person person = lists.get(i);            Log.i("TAG", "Person name : " + person.getName() + " ---- age : " + person.getAge());        }    }

三、注意

使用以上方法传递对象时,都是创建了新的实例,而非传递对象的引用,如果是传递引用,也就无需序列化了。

更多相关文章

  1. 类和 Json对象
  2. 浅谈Android中MVC、MVP、MVVM模式(二)
  3. Android消息机制Looper与VSync的传播
  4. 3-14 servlet 传出对象给 Android
  5. android(NDK+JNI)---Android使用JNI实现Java与C之间传递数据
  6. Android进阶 ——— Android官方架构组件Lifecycle
  7. android 对象保存到SP
  8. Android(安卓)GreenDAO ORM的使用(一) 生成DAO和Bean
  9. Android音乐播放器代码实现

随机推荐

  1. android 跳动频谱 播放器(类似千千静听)
  2. android studio使用android annotations
  3. Android应用程序编译问题
  4. Timer的schedule和scheduleAtFixedRate的
  5. SeekBar 粗略小节
  6. 第一个android程序以及遇到问题解决办法
  7. Android-->RatingBar自定义大小,自定义样
  8. Android(安卓)Windows开发环境搭建
  9. Android(安卓)实现定时任务的五种方式
  10. Android平台开发-Android(安卓)keypad ma