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

Firebase存储异常:使用dbref.push().setValue(storeInfo)无数据存入

问题解决思路

一、storeInfo无法存入Firebase的原因及解决

Firebase Realtime Database序列化自定义对象时,要求类满足以下核心条件:

  • 必须包含无参构造函数(public权限或默认权限,供反射创建实例)
  • 所有需要存储的字段为public,或者提供对应的public getter方法

你的StoreInfo类大概率不符合上述要求,修改示例如下:

方案1:使用public字段

public class StoreInfo {
    // 字段必须为public
    public String data;
    public String date;
    public String time;

    // 必须添加无参构造函数
    public StoreInfo() {}

    // 带参构造函数保留
    public StoreInfo(String data, String date, String time) {
        this.data = data;
        this.date = date;
        this.time = time;
    }
}

方案2:使用private字段+getter方法

public class StoreInfo {
    private String data;
    private String date;
    private String time;

    public StoreInfo() {}

    public StoreInfo(String data, String date, String time) {
        this.data = data;
        this.date = date;
        this.time = time;
    }

    // 必须提供public的getter方法
    public String getData() { return data; }
    public String getDate() { return date; }
    public String getTime() { return time; }
}

二、setValue(data)仅存1条数据的排查

dbref.push()会自动生成唯一子节点ID(如-Nxxxxxx),理论上每次调用都会新增数据而非覆盖。若出现仅存1条的情况,按以下步骤排查:

  1. 检查dbref的初始化路径:确保dbref = FirebaseDatabase.getInstance().getReference("你的目标路径");,而非指向某个具体叶子节点
  2. 在onComplete中添加错误日志,确认是否存储失败:
.addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            scanner.qrtext.setText("Course: " + data);
            scanner.date.setText("Date: " + date);
            scanner.arrival.setText("Arrival time: " + time);
            onBackPressed();
        } else {
            // 打印错误日志定位问题
            Log.e("FirebaseStore", "存储失败", task.getException());
        }
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:55:03