Я реализую приложение для викторины в Android studio , используя kotlin. Я общаюсь с 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)
}
}
}
})
}
}
Но это не работает, потому что рекорд равен null , когда он должен быть 0. Мой userId правильный, так что это не так, я не знаю что не так. Поскольку я новичок в Firebase, мне сложно понять синтаксис. Любые предложения, что может быть не так?
Спасибо!