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

