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

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 -> 考试中心 -> 考试数据,与预期不符。
解决方案

问题根源有两点:

  1. 代码将数据挂载到了「Student」节点下,而非直接以用户名作为根级节点;
  2. 当前获取的是用户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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:32:07