【发布时间】:2020-08-08 11:24:20
【问题描述】:
我想从 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()
}
})
我有一个名为 User 的简单模型来处理数据(我知道密码应该在这里散列)
@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 更容易和更有效
【问题讨论】:
标签: android json firebase kotlin firebase-realtime-database