Я хочу получить указанные c дочерние значения, такие как (номер телефона, имя, фамилия) из базы данных Firebase в реальном времени, но для каждого пользователя существует уникальный ключ
, и это дерево:
Я пробовал это:
var loginRef = rootRef.child("users").orderByChild("phoneNumber").equalTo(phone).addListenerForSingleValueEvent(
object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
// Get data object and use the values to update the UI
val phoneNumber = dataSnapshot.getValue<User>()!!.phoneNumber
// ...
Toast.makeText(applicationContext, "phone number is: $phoneNumber", Toast.LENGTH_LONG).show()
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Data failed, log a message
Log.w(TAG, "LoginData:onCancelled", databaseError.toException())
// ...
Toast.makeText(applicationContext, "error", Toast.LENGTH_LONG).show()
}
})
, и у меня есть простая модель под названием Пользователь для обработки данных (я знаю пароли должен быть хеширован здесь)
@IgnoreExtraProperties
data class User(
var firstName: String? = "",
var fatherName: String? = "",
var familyName: String? = "",
var phoneNumber: String? = "",
var password: String? = ""
) {
@Exclude
fun toMap(): Map<String, Any?> {
return mapOf(
"firstName" to firstName,
"fatherName" to fatherName,
"familyName" to familyName,
"phoneNumber" to phoneNumber,
"password" to password
)
}
}
, но dataSnapshot.getValue<User>()!!.phoneNumber
никогда не будет работать, так как первый узел, полученный в этом запросе, является уникальным ключом
, что мне нужно что-то вроде dataSnapshot.child("unique-key/phoneNumber").value
для каждого ребенка, которого я хочу использовать, но способ проще и эффективнее, чем .addChildEventListener
для каждого узла