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

Android Kotlin中如何根据userId从Firebase获取对应用户数据?

Firebase Realtime Database 按用户ID拉取个人资料解决方案

现存问题梳理

  • 未校验登录状态、未给uid变量赋值,无法匹配到对应用户的节点
  • 直接对UID对应的整体用户节点读取字符串类型值,该节点是包含first_name、email等多个字段的结构化数据,类型不匹配会导致读取返回空
  • 监听整个Users节点会拉取所有用户的数据,既浪费带宽也不符合数据权限要求

修正后实现代码

auth = FirebaseAuth.getInstance()
// 先校验用户登录状态
val loggedUser = auth.currentUser
if (loggedUser == null) {
    Log.e("Firebase", "用户未登录,无法加载个人资料")
    return
}
val uid = loggedUser.uid
// 直接定位到当前登录用户的专属节点,无需监听全量用户数据
val userRef = FirebaseDatabase.getInstance().getReference("Users").child(uid)
userRef.addValueEventListener(object: ValueEventListener{
    override fun onDataChange(snapshot: DataSnapshot) {
        if (!snapshot.exists()) {
            Log.e("Firebase", "对应用户数据不存在")
            return
        }
        // 单独读取对应字段的字符串值
        val firstName = snapshot.child("first_name").getValue(String::class.java)
        Log.e("first_name", firstName ?: "未设置名字")
        // 其余字段同理读取即可,示例:
        val lastName = snapshot.child("last_name").getValue(String::class.java)
        val email = snapshot.child("email").getValue(String::class.java)
    }

    override fun onCancelled(error: DatabaseError) {
        // 打印错误信息用于排查问题,常见错误包括权限不足、网络异常等
        Log.e("FirebaseError", "数据读取失败:${error.message}")
    }
})

额外注意事项

请先确认你的实时数据库权限规则允许用户读取自己的节点,参考规则如下:

{
  "rules": {
    "Users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

按照上述方案调整后即可正常拉取当前登录用户的个人资料信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:07