Android(安卓)Activity之间传递类对象
16lz
2021-12-04
一、简介
开发过程中,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()); } }
三、注意
使用以上方法传递对象时,都是创建了新的实例,而非传递对象的引用,如果是传递引用,也就无需序列化了。
更多相关文章
- 类和 Json对象
- 浅谈Android中MVC、MVP、MVVM模式(二)
- Android消息机制Looper与VSync的传播
- 3-14 servlet 传出对象给 Android
- android(NDK+JNI)---Android使用JNI实现Java与C之间传递数据
- Android进阶 ——— Android官方架构组件Lifecycle
- android 对象保存到SP
- Android(安卓)GreenDAO ORM的使用(一) 生成DAO和Bean
- Android音乐播放器代码实现