Я предполагаю, что вы вставляете пользователей следующим образом:
fun insertUser(user: User) {
val ref = FirebaseDatabase.getInstance().getReference("/users")
ref.push().setValue(user)
}
Если это так, я бы посоветовал вам сохранить ссылку на ключ для пользователя.
fun insertUser(user: User): String {
val ref = FirebaseDatabase.getInstance().getReference("/users")
val child = ref.push()
child.setValue(user)
return child.key
}
Теперь немного измените ваш showUsername()
, чтобы он принимал userKey в качестве параметра, который будет принимать точную ссылку пользователя,
private fun showUsername(userKey: String) {
val ref = FirebaseDatabase.getInstance().getReference("/users")
// Add listener to the specific user instead of whole users reference
ref.child(userKey).addValueEventListener(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
val userName = p0.child("username").getValue().toString()
txtUserTampil.text = userName
}
})
}
Теперь вызовите вышеуказанные функции следующим способом для сохраненияключ и / или передать его в функцию showUsername()
,
val user = User(...)
val userKey = insertUser(user) // store it
showUsername(userKey)
Альтернатива
Если вы уже храните uid и не хотите хранить userKeyтогда я бы посоветовал вам не указывать uid в свойстве пользователя и использовать его в качестве ключа пользователя,
val uid = ...
val name = ...
val email = ...
val user = User(name, email)
//Insert
val ref = FirebaseDatabase.getInstance().getReference("/users")
ref.child(uid).setValue(user)
// Display
showUsername(uid)