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
相关产品推荐
相关产品推荐

