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

如何从Firebase获取并在个人资料页面显示用户用户名

解决Firebase用户信息在Profile Fragment不显示的问题

核心排查点与修复步骤

  • 确保Profile Fragment读取逻辑正确
    注册时数据存在Users/{currentUserID}/username路径下,读取时必须严格匹配该路径。在Fragment的onViewCreated方法中添加读取逻辑:

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        
        val usernameTv = view.findViewById<TextView>(R.id.username)
        val currentUser = FirebaseAuth.getInstance().currentUser
        
        currentUser?.let { user ->
            val usersRef = FirebaseDatabase.getInstance().reference.child("Users").child(user.uid)
            usersRef.addValueEventListener(object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    if (snapshot.exists()) {
                        val username = snapshot.child("username").value.toString()
                        usernameTv.text = username
                    }
                }
    
                override fun onCancelled(error: DatabaseError) {
                    Toast.makeText(requireContext(), "读取用户信息失败: ${error.message}", Toast.LENGTH_SHORT).show()
                }
            })
        } ?: run {
            startActivity(Intent(requireContext(), SignUpActivity::class.java))
            requireActivity().finish()
        }
    }
    
  • 检查数据库规则权限
    若规则限制了读取权限,即使数据存在也无法获取。测试阶段可临时设置规则(上线后务必修改为安全规则):

    {
      "rules": {
        ".read": true,
        ".write": true
      }
    }
    

    正式环境建议设置为仅登录用户可读取自身数据:

    {
      "rules": {
        "Users": {
          "$uid": {
            ".read": "$uid === auth.uid",
            ".write": "$uid === auth.uid"
          }
        }
      }
    }
    
  • 验证数据键名完全匹配
    注册代码中保存的键是"username"(全小写),读取时必须使用完全相同的键名,Firebase数据库的键名区分大小写,不能写成"UserName"或"userName"。

  • 确认用户已正常登录
    读取数据前务必确保FirebaseAuth.getInstance().currentUser不为null,若用户未登录,需引导至登录/注册页面。

  • 调试读取过程
    在onDataChange方法中添加日志,确认是否获取到数据:

    Log.d("ProfileFragment", "用户数据快照: ${snapshot.value}")
    

    通过Logcat查看输出,验证username字段是否存在且有值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:13:18