You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Intent.putExtra无法传递自定义对象的解决咨询

解决Intent传递自定义Employee对象的问题

要通过Intent传递自定义对象,你的Employee类必须实现序列化接口,Android提供两种常用方案:

方案1:实现Serializable接口(简单易上手)

这是Java自带的序列化方式,代码改动最小:

  1. 修改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; }
}
  1. 传递对象(和教程代码一致):
intent.putExtra("EDIT", emp);
  1. 接收对象:
Employee emp = (Employee) getIntent().getSerializableExtra("EDIT");

方案2:实现Parcelable接口(Android官方推荐,效率更高)

这是Android专属的序列化方式,性能优于Serializable,适合频繁传递对象的场景:

  1. 修改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; }
}
  1. 传递对象(和教程代码一致):
intent.putExtra("EDIT", emp);
  1. 接收对象:
// Android 12及以下
Employee emp = getIntent().getParcelableExtra("EDIT");

// Android 13及以上,建议指定类类型
Employee emp = getIntent().getParcelableExtra("EDIT", Employee.class);

注意事项

  • Firebase实体类必须保留空构造方法,否则无法正常解析云端数据。
  • 如果Employee类包含其他自定义对象成员,这些成员也需要实现对应的序列化接口(Serializable或Parcelable)。

内容的提问来源于stack exchange,提问作者Eya Rais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:20:23