一、单向传递数据和接收
1.可以传递数据类型
- 传递基本数据类型、字符串和对应的数组
- 传递Bundle(类似HashMap)
- 传递对象数据
- 传递Integer集合、String集合和parcelable集合
2.代码
1)传递和接收基本数据类型、字符串和对应数组
传递:
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//建立数据
int i = 1;
String s = "hello";
String[] strings = {"ab","cd","ef"};
//传递数据
intent.putExtra("int类型数据",i);
intent.putExtra("String类型数据",s);
intent.putExtra("String数组",strings);
//跳转页面
startActivity(intent);
接收:
Intent intent = getIntent();
//接收数据
String getString = intent.getStringExtra("MainActivity传来的String类型数据");
//如果没接收到则返回设置的默认值
int getInt = intent.getIntExtra("MainActivity传来的int类型数据",0);
String[] stingArr = intent.getStringArrayExtra("MainActivity传来的String数组");
2)传递和接收Bundle
传递:
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//创建bundle
Bundle bundle = new Bundle();
//建立数据
int i = 1;
String s = "hello";
String[] strings = {"ab","cd","ef"};
//把数据封装到bundle中
//这里的bundle也可以存放对象数据
bundle.putInt("int",i);
bundle.putString("String",s);
bundle.putStringArray("StringArr",strings);
//传递bundle
intent.putExtra("bundle",bundle);
//跳转页面
startActivity(intent);
接收:
Intent intent = getIntent();
//接收Bundle
Bundle bundle = intent.getBundleExtra("bundle");
//取出Bundle封装的数据
int i = bundle.getInt("int");
String s = bundle.getString("String");
String[] strings = bundle.getStringArray("StringArr");
3)传递和接收对象数据
注意:所传递的对象必须实现Serializable接口或者Parcelable接口
传递实现Serializable接口的对象:
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//建立对象
//注意这里的对象必须实现Serializable接口或者Parcelable接口
//这里的User类实现的Serializable接口
User user1 = new User(10,"kll",1001);
User user2 = new User(11,"momo", 1002);
//传递对象
intent.putExtra("user1",user1);
intent.putExtra("user2",user2);
//跳转页面
startActivity(intent);
接收实现Serializable接口的对象:
Intent intent = getIntent();
//接收User对象数据
User user1 = (User)intent.getSerializableExtra("user1");
User user2 = (User)intent.getSerializableExtra("user2");
注:实现Serializable接口方法很简单,只需要在类后面implements Serializable即可!
扫描二维码关注公众号,回复:
11135513 查看本文章
![](/qrcode.jpg)
传递实现Parcelable接口的对象:
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//建立实现类Parcelable接口的对象
Pet petDog = new Pet("白菜",3);
Pet petCat = new Pet("地雷",2);
//传递对象数据
intent.putExtra("宠物狗白菜",petDog);
intent.putExtra("宠物猫地雷",petCat);
//跳转页面
startActivity(intent);
接收实现Parcelable接口的对象:
Intent intent = getIntent();
//接收Pet对象数据
Pet pet1 = intent.getParcelableExtra("宠物狗白菜");
Pet pet2 = intent.getParcelableExtra("宠物猫地雷");
注:实现Parcelable接口的方式有点复杂,下面开始介绍一个类实现Parcelable接口的方式!
实现Parcelable接口的方式
1.要点:
- 让类实现Parcelable接口
- 然后实现接口中的describeContents和writeToParcel方法
- 要建立一个形参为Parcel的构造器
- 实例化一个CREATOR常量对象
详细介绍传送门:https://blog.csdn.net/u012702547/article/details/47151001
2.代码
public class Pet implements Parcelable {
private String name;
private int age;
/*
* 1.先让类实现Parcelable接口
* 2.实现接口中的describeContents和writeToParcel方法
* */
//默认返回0即可
@Override
public int describeContents() {
return 0;
}
//这里写入对象属性的顺序要与下面读的顺序一致!
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
public Pet(Parcel source) {
name = source.readString();
age = source.readInt();
}
//实例化一个CREATOR
public static final Creator<Pet> CREATOR = new Creator<Pet>() {
//这里返回要求返回new Pet(source)
@Override
public Pet createFromParcel(Parcel source) {
return new Pet(source);
}
//这里把0改成size即可
@Override
public Pet[] newArray(int size) {
return new Pet[size];
}
};
二、小结
1.无论是传递基本数据类型、数组、字符串、对象,都是putExtra输入键值对即可
2.接收数据的方式要根据你传递的数据来定