Android Studio中Intent.putExtra无法传递自定义对象的解决咨询
解决Intent传递自定义Employee对象的问题
要通过Intent传递自定义对象,你的Employee类必须实现序列化接口,Android提供两种常用方案:
方案1:实现Serializable接口(简单易上手)
这是Java自带的序列化方式,代码改动最小:
- 修改
Employee类,实现Serializable接口:
public class Employee implements Serializable { // 你的类成员变量 private String name; private String employeeId; // Firebase必须的空构造方法 public Employee() {} // 自定义构造方法 public Employee(String name, String employeeId) { this.name = name; this.employeeId = employeeId; } // 生成getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmployeeId() { return employeeId; } public void setEmployeeId(String employeeId) { this.employeeId = employeeId; } }
- 传递对象(和教程代码一致):
intent.putExtra("EDIT", emp);
- 接收对象:
Employee emp = (Employee) getIntent().getSerializableExtra("EDIT");
方案2:实现Parcelable接口(Android官方推荐,效率更高)
这是Android专属的序列化方式,性能优于Serializable,适合频繁传递对象的场景:
- 修改
Employee类,实现Parcelable接口并完成相关方法:
public class Employee implements Parcelable { private String name; private String employeeId; // Firebase必须的空构造方法 public Employee() {} // 自定义构造方法 public Employee(String name, String employeeId) { this.name = name; this.employeeId = employeeId; } // 从Parcel中读取数据的构造方法 protected Employee(Parcel in) { name = in.readString(); employeeId = in.readString(); } // 必须定义的CREATOR常量 public static final Creator<Employee> CREATOR = new Creator<Employee>() { @Override public Employee createFromParcel(Parcel in) { return new Employee(in); } @Override public Employee[] newArray(int size) { return new Employee[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeString(employeeId); } // 生成getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmployeeId() { return employeeId; } public void setEmployeeId(String employeeId) { this.employeeId = employeeId; } }
- 传递对象(和教程代码一致):
intent.putExtra("EDIT", emp);
- 接收对象:
// Android 12及以下 Employee emp = getIntent().getParcelableExtra("EDIT"); // Android 13及以上,建议指定类类型 Employee emp = getIntent().getParcelableExtra("EDIT", Employee.class);
注意事项
- Firebase实体类必须保留空构造方法,否则无法正常解析云端数据。
- 如果
Employee类包含其他自定义对象成员,这些成员也需要实现对应的序列化接口(Serializable或Parcelable)。
内容的提问来源于stack exchange,提问作者Eya Rais
相关产品推荐
相关产品推荐

