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

Android Firebase数据库添加Activity对象仅部分字段写入问题求助

解决Firebase仅写入部分Activity字段的问题

这个问题我之前帮不少开发者排查过,核心原因是你没满足Firebase Realtime Database的Java对象序列化规则,咱们一步步来修正:

问题根源

Firebase在把Java对象序列化写入数据库时,有两个硬性要求:

  • 必须提供无参数的构造函数:Firebase需要通过反射创建对象实例,没有无参构造的话,它没法完成这个基础步骤
  • 所有要写入数据库的字段,要么是public修饰的,要么有符合JavaBean规范的getter/setter方法:Firebase依赖这些方法来读取字段的值

看你的Activity类,既没有无参构造函数,而且如果getter/setter命名不规范或者缺失,Firebase就只能访问到它能正确读取值的字段(也就是你提到的activity_workout_user和user,大概率这两个的方法刚好符合规范)。

修正方案

修改你的Activity类,补充无参构造函数,并且给所有字段添加正确的getter/setter:

public class Activity {
    private String workout, user, exercise, duration, weight, reps, date, activity_workout_user;

    // 必须添加的无参构造函数,空实现即可
    public Activity() {}

    // 保留你原来的带参构造函数
    public Activity(String workout, String user, String exercise, String duration, String weight, String reps, String date) {
        this.workout = workout;
        this.user = user;
        this.exercise = exercise;
        this.duration = duration;
        this.weight = weight;
        this.reps = reps;
        this.date = date;
        this.activity_workout_user = exercise + "_" + workout + "_" + user;
    }

    // 所有字段的getter和setter,严格遵循JavaBean命名规范
    public String getWorkout() { return workout; }
    public void setWorkout(String workout) { this.workout = workout; }

    public String getUser() { return user; }
    public void setUser(String user) { this.user = user; }

    public String getExercise() { return exercise; }
    public void setExercise(String exercise) { this.exercise = exercise; }

    public String getDuration() { return duration; }
    public void setDuration(String duration) { this.duration = duration; }

    public String getWeight() { return weight; }
    public void setWeight(String weight) { this.weight = weight; }

    public String getReps() { return reps; }
    public void setReps(String reps) { this.reps = reps; }

    public String getDate() { return date; }
    public void setDate(String date) { this.date = date; }

    public String getActivity_workout_user() { return activity_workout_user; }
    public void setActivity_workout_user(String activity_workout_user) { this.activity_workout_user = activity_workout_user; }
}

额外小提示

我还注意到你在addActivity方法里创建Activity实例时,最后一个参数传的是页面创建时的timeCreated,但你明明定义了记录当前添加活动时间的activityDate。如果你的需求是记录活动被添加的日期,建议把这行代码改成:

Activity activity = new Activity(activityWorkout, activityUser, activityExercise, activityDuration, activityWeight, activityReps, activityDate);

完成这些修改后,所有字段应该都能正常写入Firebase数据库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:35