Как получить поле в firebase с идентификатором пользователя - PullRequest
0 голосов
/ 11 марта 2020

Я реализую приложение для викторины в Android studio , используя kotlin. Я общаюсь с firebase , где я храню пользователей, которые регистрируются. Вот как это структурировано в firebase:

enter image description here

И вот как я могу сохранить пользователя при регистрации:

   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, мне сложно понять синтаксис. Любые предложения, что может быть не так?

Спасибо!

1 Ответ

1 голос
/ 11 марта 2020

Вы неправильно строите ссылку на узел пользователя. Вы, вероятно, хотели это сделать:

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

Примечание child('Users').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...