firebase - 如何使用用户 ID 在 Firebase 中检索字段
问题描述
我正在使用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')
。
推荐阅读
- ios - 应用程序卡在带有 Xcode 11 测试版的 iOS 13 测试版模拟器上,但在带有 Xcode 10 的 iOS 13 测试版模拟器上运行良好
- c# - DownloadFileAsync (WebClient) 的奇怪行为
- powershell - 打开 Excel 电子表格时,PowerShell 处理字符串中的空格
- javascript - 如何从数组中删除特定值
- reactjs - 为什么我的 onClick 在我的 React 项目中不起作用
- vb.net - 打开 FileDialog 时刷新桌面
- c# - 无法从串口接收数据
- pandas - 如何获取熊猫数据框中特定列的模式值的索引
- javascript - 将 reactjs 中部分选项值的字体粗细更改为粗体
- java - 如何在我的应用程序根目录中显示 swagger-ui?