我正在使用kotlin在Android 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的新手,所以我很难理解语法。有什么建议可能有什么问题吗?
谢谢!
您没有正确建立对用户节点的引用。您可能打算这样做:
ref.child('Users').child(userId).addListenerForSingleValueEvent(...)
注意child('Users')
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句