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

Android向Firebase实时数据库推键值对遇语法错误,求解

Firebase Realtime Database 推送数据语法错误修复

你的代码存在两个核心语法问题,对应Java语言规范和Firebase SDK的使用规则:

1. Java不支持直接使用JSON字面量

你在push()中写的{...}是JavaScript的JSON对象写法,Java没有这种语法,必须用HashMap或者自定义实体类来封装键值对数据。

用HashMap的修正示例:

DatabaseReference pay_details = database.getReference("pay/0/0/");

// 用HashMap封装键值对
Map<String, Object> payData = new HashMap<>();
payData.put("Actual amount", arr.get(i).get(9));
payData.put("Current reading", arr.get(i).get(5));
payData.put("Employee", arr.get(i).get(1));
payData.put("Expected amount", arr.get(i).get(9));
payData.put("Installment", arr.get(i).get(10));
payData.put("Meter current date", arr.get(i).get(3));
payData.put("Meter previous date", arr.get(i).get(2));
payData.put("Previous reading", arr.get(i).get(4));
payData.put("Start from", arr.get(i).get(8));
payData.put("Total charge", arr.get(i).get(7));
payData.put("Type", arr.get(i).get(0));
payData.put("Unit consumed", arr.get(i).get(6));

// 先调用push()生成唯一节点,再用setValue()写入数据
pay_details.push().setValue(payData);

2. Firebase SDK的push()方法用法错误

push()方法本身不接收数据参数,它的作用是生成一个带有唯一ID的子节点引用,需要在调用push()后链式调用setValue()来传入要存储的数据。

额外建议

如果数据结构固定,也可以自定义实体类(比如PayDetail),通过注解映射字段后直接传入setValue(),代码可读性会更好:

// 自定义实体类
public class PayDetail {
    private String actualAmount;
    private String currentReading;
    // 对应其他字段的属性
    // 必须添加无参构造器和getter/setter方法

    // 构造器、getter、setter代码省略
}

// 使用实体类写入数据
PayDetail detail = new PayDetail();
detail.setActualAmount(arr.get(i).get(9));
detail.setCurrentReading(arr.get(i).get(5));
// 为其他字段赋值...

pay_details.push().setValue(detail);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:34