在子项中搜索值时如何获取数据库子项或值
How to get database child or value when searching for value inside the child
我正在尝试在我的数据库中搜索用户电子邮件,然后当找到该电子邮件时,将 uid 或父 table(与 uid 相同)作为 val 存储到电子邮件中。在他们那一刻,我想我有在数据库中搜索电子邮件的方法,所以在 if 语句中我需要存储 uid 以备后用。
fun checkUid(layout: View) {
val email = layout.findViewById<EditText>(ie.wit.savvytutor.R.id.loginEmail).text.toString()
val userDatabase =
FirebaseDatabase.getInstance("*db link")
.getReference(
"Users"
)
val emailCheck = userDatabase.equalTo(email)
val eventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (!dataSnapshot.exists()) {
//get The Uid for that user
println("yay")
}
}
override fun onCancelled(databaseError: DatabaseError) {
println("no!")
}
}
emailCheck.addListenerForSingleValueEvent(eventListener)
}
我的数据库的 json 如下所示:
{
"email" : "jamiehogan4848@gmail.com",
"password" : "Test123",
"profilepic" : "",
"role" : "Parent",
"uid" : "-Mz1FR2jJnrBa1Ws-aVU"
}
所以澄清一下,因为我觉得这措辞不当,我需要在数据库中搜索电子邮件 -> 然后获取该电子邮件的 uid 或父父 table 名称 -> 并将其存储为瓦尔。如前所述,我想我已经完成了第一部分!
您在这里缺少 orderBy
子句:
val emailCheck = userDatabase.equalTo(email)
由于要比较 email
属性 的值,因此需要告诉数据库对其进行排序:
val emailCheck = userDatabase.orderByChild("email").equalTo(email)
现在查询将匹配正确的子节点。有关更多信息,另请参阅 ordering and filtering data.
上的文档
然后您可以记录匹配的子节点的键:
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (snapshot in dataSnapshot.children) {
println(snapshot.key)
}
}
有关详细信息,请参阅 listening for value events 上的文档。
我正在尝试在我的数据库中搜索用户电子邮件,然后当找到该电子邮件时,将 uid 或父 table(与 uid 相同)作为 val 存储到电子邮件中。在他们那一刻,我想我有在数据库中搜索电子邮件的方法,所以在 if 语句中我需要存储 uid 以备后用。
fun checkUid(layout: View) {
val email = layout.findViewById<EditText>(ie.wit.savvytutor.R.id.loginEmail).text.toString()
val userDatabase =
FirebaseDatabase.getInstance("*db link")
.getReference(
"Users"
)
val emailCheck = userDatabase.equalTo(email)
val eventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (!dataSnapshot.exists()) {
//get The Uid for that user
println("yay")
}
}
override fun onCancelled(databaseError: DatabaseError) {
println("no!")
}
}
emailCheck.addListenerForSingleValueEvent(eventListener)
}
我的数据库的 json 如下所示:
{
"email" : "jamiehogan4848@gmail.com",
"password" : "Test123",
"profilepic" : "",
"role" : "Parent",
"uid" : "-Mz1FR2jJnrBa1Ws-aVU"
}
所以澄清一下,因为我觉得这措辞不当,我需要在数据库中搜索电子邮件 -> 然后获取该电子邮件的 uid 或父父 table 名称 -> 并将其存储为瓦尔。如前所述,我想我已经完成了第一部分!
您在这里缺少 orderBy
子句:
val emailCheck = userDatabase.equalTo(email)
由于要比较 email
属性 的值,因此需要告诉数据库对其进行排序:
val emailCheck = userDatabase.orderByChild("email").equalTo(email)
现在查询将匹配正确的子节点。有关更多信息,另请参阅 ordering and filtering data.
上的文档然后您可以记录匹配的子节点的键:
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (snapshot in dataSnapshot.children) {
println(snapshot.key)
}
}
有关详细信息,请参阅 listening for value events 上的文档。