首页 > 解决方案 > 如何使用用户 ID 在 Firebase 中检索字段

问题描述

我正在使用kotlinAndroid Studio中实现一个测验应用程序。我正在与存储注册用户的firebase通信。这是它在firebase中的结构:

在此处输入图像描述

这就是我在用户注册时保存用户的方式:

   class User(val uid: String, val Username: String, var highscore: Int)

   private fun saveUserToDatabase(){
       val uid: String? = FirebaseAuth.getInstance().uid
       val ref: DatabaseReference = FirebaseDatabase.getInstance().getReference( "/Users/$uid")

        val user = User(uid.toString(), signUpUsername.text.toString(), 0)

        ref.setValue(user)
        .addOnSuccessListener {
            Log.d("RegisterActivity", "User was saved in the database")
        }
    }
}

当用户登录并玩了一轮时,我想用当前用户userId检索高分,如果分数大于高分,则更新高分。这是我处理的函数:

private fun updateScore(score: Int, userId: String, isLoggedIn: Boolean){

    if(isLoggedIn) {
        var ref = FirebaseDatabase.getInstance().reference

        ref.child(userId).addListenerForSingleValueEvent(object : ValueEventListener {

                override fun onCancelled(error: DatabaseError) {
                    Log.e("onCancelledError", "onCancelled", error.toException())
                }

                override fun onDataChange(dataSnapShot: DataSnapshot) {

                    var highscore = dataSnapShot.child("highscore").getValue(Int::class.java)
                    Log.d("highscore", highscore.toString())
                    if(highscore != null){
                        if (highscore < score) {
                            highscore = score
                            dataSnapShot.ref.setValue(highscore)
                        }
                    }

                }
        })
    }
}

但这不起作用,因为 highscore 是null,当它应该是 0 时。我的 userId 是对的,所以不是这样,我不知道出了什么问题。由于我是 firebase 新手,我很难理解语法。有什么建议可能是错的吗?

谢谢!

标签: firebasekotlinfirebase-realtime-database

解决方案


您没有正确构建对用户节点的引用。您可能打算这样做:

ref.child('Users').child(userId).addListenerForSingleValueEvent(...)

注意child('Users')


推荐阅读