Kotlin中如何访问以当前用户名命名的Firebase数据库节点?
Kotlin Firebase数据库节点访问问题
我希望在Kotlin中访问Firebase数据库里以当前用户名命名的节点,但目前的代码一直在「Student」节点下创建新节点。
当前代码
dbRef = FirebaseDatabase.getInstance()..getReference("Student") var userId = FirebaseAuth.getInstance().currentUser?.uid val exmdata = examdata(stud_city, stud_centre, stud_slot, stud_examdate) if (userId != null) { dbRef.child(userId!!).child(stud_centre).setValue(exmdata)
结构对比
- 期望结构:根节点下直接是用户名节点,节点下存储对应考试中心的考试数据(城市、中心名称、场次、考试日期)。
- 实际结构:数据被嵌套在「Student」节点下,层级为
Student -> 用户UID -> 考试中心 -> 考试数据,与预期不符。
解决方案
问题根源有两点:
- 代码将数据挂载到了「Student」节点下,而非直接以用户名作为根级节点;
- 当前获取的是用户UID而非用户名,导致节点名称不符合需求。
修改后的代码
// 获取当前用户的用户名(需确保用户账号已设置displayName) val userName = FirebaseAuth.getInstance().currentUser?.displayName if (userName != null) { // 直接引用用户名作为数据库节点 val dbRef = FirebaseDatabase.getInstance().getReference(userName) val exmdata = examdata(stud_city, stud_centre, stud_slot, stud_examdate) // 将考试数据写入用户名节点下的考试中心子节点 dbRef.child(stud_centre).setValue(exmdata) } else { // 处理用户未设置用户名的异常情况 println("当前用户未设置用户名,请先完善账号信息") }
补充说明
- 如果你的用户名存储在Firebase用户的自定义字段中(而非默认的displayName),需要调整获取用户名的逻辑,比如通过Firebase Auth的用户额外属性或Firestore用户文档获取;
- 请检查Firebase数据库规则,确保允许对用户名节点进行读写操作,避免权限拒绝错误。
内容的提问来源于stack exchange,提问作者Surbhi
相关产品推荐
相关产品推荐

