用Intent传递数据的时候,如果传递的是基本类型,不用说很容易,单个的就是单个的传,多个就用bundle传递,如果传递的是对象或者是集合,简单的某个集合还是可以直接传的,但是大多数的是不可以传的。在传递对象的时候有两种方式,一种是实现Parcelable或者Serializable接口序列化对象来传递,在传集合的时候,可能是通过简单的集合嵌套复杂的集合进行传递,但是这些方式都非常的麻烦、复杂,待会我会介绍一种方便简单的方式。
第一种方式:实现Parcelable或者Serializable接口序列化对象来传递
Student实体实现接口Serializable的代码
package com.jky.activityparams;
import java.io.Serializable;
//Serializable 标记接口,标记这个类的实例可以被序列化
public class Student implements Serializable {
public String name;
public int age;
public boolean isSingle = false;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", isSingle="
+ isSingle + "]";
}
}
Friend实体实现接口Parcelable的代码
package com.jky.activityparams;
import android.os.Parcel;
import android.os.Parcelable;
//实现Parcelable的对象还可以用于垮进程传输
//可以用于Java与C++之间的传输
//QQ知道QQ音乐播放的当前歌曲
public class Friend implements Parcelable {
public String name;
public int age;
public boolean gender;
public Friend(String name, int age, boolean gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
//必须要有这个静态属性
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
// 读
public Friend createFromParcel(Parcel in) {
// 按照写的顺序读取
String name = in.readString();
int age = in.readInt();
int g = in.readInt();
boolean gender = false;
if (g == 1) {
gender = true;
}
return new Friend(name, age, gender);
}
// 便捷方法,快速的创建一个空的数组
public Friend[] newArray(int size) {
return new Friend[size];
}
};
// 返回0,描述对象是什么内容
@Override
public int describeContents() {
return 0;
}
// 写的方法
// writeToParcel实际传递的是Parcel
@Override
public void writeToParcel(Parcel dest, int flags) {
// 写对象的属性
dest.writeString(this.name);
dest.writeInt(this.age);
if (this.gender) {
dest.writeInt(1);
} else {
dest.writeInt(0);
}
}
@Override
public String toString() {
return "Friend [name=" + name + ", age=" + age + ", gender=" + gender
+ "]";
}
}
public void jump(View btn){
//跳转到SecondActivity
//显示意图
Intent intent = new Intent(this, SecondActivity.class);
//Activity之间传递参数
//1.单个参数
//intent.putExtra("name", "许肖华");
//2.多个参数
/*Bundle data = new Bundle();
data.putString("name", "蒋春梅");
data.putInt("age", 18);
data.putBoolean("isSingle", false);
intent.putExtra("data", data);*/
//3.传递Serializable对象
/*Student s = new Student("蒋春梅",18);
intent.putExtra("data", s);*/
//4.传递parcelable对象
//好处:序列化的效率更高
Friend f = new Friend("袁丁",18,false);
intent.putExtra("data", f);
startActivity(intent);
}
//获取传递的参数
Intent intent = getIntent();
//1.
/*String name = intent.getStringExtra("name");
Log.d("geek", name);*/
//2.Bundle
/*Bundle data = intent.getBundleExtra("data");
String name = data.getString("name");
Log.d("geek", name);*/
//3.Serializable对象
/*Student s = (Student)intent.getSerializableExtra("data");
Log.d("geek", s.toString());*/
//4.parcelable对象
Friend f = intent.getParcelableExtra("data");
Log.d("geek", f.toString());
第一种方式就是这样通过序列化的方式实现对象的传递,供大家了解,接下来将介绍第二种简单的方式
第一种方式:通过继承Application类
在子类中定义公共变量
/***用于对象的传递 传递完了记得Remove掉*/
public Map datas = new HashMap<>();
传递方
EntityTest entityTest = new EntityTest();
caHyApplication1.datas.put("entityTest",entityTest);
接收方
EntityTest entityTest = (EntityTest) caHyApplication.datas.get(name);
caHyApplication.datas.remove(name);