如果电子邮件存在或不存在,则返回总是false

时间:2019-05-14 11:40:29

标签: firebase firebase-realtime-database kotlin

我正在检查电子邮件是否已经注册

query=googleRef.orderByChild("email").equalTo(newEmail).addValueEventListener(object :ValueEventListener{
  override fun onCancelled(p0: DatabaseError) {
     println(p0.code)
  }

  override fun onDataChange(p0: DataSnapshot) {
     if(p0.exists())
     {
         println("Yes user exists")
     }
      else if(!p0.exists())

     {
         println("Users dont exists")
     }
  }

注释代码:

我曾经使用过插入操作

googleRef.child("userID").push().setValue(userId)
googleRef.child("gname").push().setValue(userName)
googleRef.child("email").push().setValue(reEmail)
googleRef.child("photoUrl").push().setValue(userpicUrl)

1 个答案:

答案 0 :(得分:0)

如果添加两个用户,则添加代码的方式将导致这样的结构:

user_number= int(input("What is your number? "))

check_number=int(input("What is the number to check against. "))

factor = 1
print(check_number, factor*user_number)
while(check_number>(factor*user_number)):
    print(factor)
    print("Not working.")
    factor+=1

working_factor = check_number%user_number+1
print("using modulo: ", working_factor)
print("Working factor: ",factor)

因此,对于每个用户的每个属性,您都有一个单独的生成的推送ID(以"googleRef": { "userID": { "-Ldfs32189eqdqA1": "userID1", "-Ldfs32189eqdqA5": "userID2" }, "gname": { "-Ldfs32189eqdqA2": "gname1", "-Ldfs32189eqdqA6": "gname2" }, "email": { "-Ldfs32189eqdqA3": "email1", "-Ldfs32189eqdqA7": "email2" }, "photoUrl": { "-Ldfs32189eqdqA4": "photoUrl1", "-Ldfs32189eqdqA8": "photoUrl2" } } 开头的键),这是非常不常见的。

存储用户信息的更惯用的形式是:

-

或者(甚至更好):

"googleRef": {
  "-Ldfs32189eqdqA1": {
    "userID": "userID1",
    "gname": "gname1",
    "email": "email1",
    "photoUrl": "photoUrl1"
  },
  "-Ldfs32189eqdqA5": {
    "userID": "userID2",
    "gname": "gname2"
    "email": "email2"
    "photoUrl": "photoUrl2"
  },
}

后两个之所以更常见,是因为它们将每个用户的信息分组在一起,这使得更容易/可能找到每个用户的信息。在这两种情况下,您都可以在查询中找到具有特定电子邮件地址的用户。

最后一个最好的原因是,每个用户的信息都存储在用户ID下,该ID已被保证是唯一的。这种结构可以通过用户的UID查找用户信息,而无需查询。

要编写类似于上一个示例的结构,请使用:

"googleRef": {
  "userID1": {
    "gname": "gname1",
    "email": "email1",
    "photoUrl": "photoUrl1"
  },
  "userID2": {
    "gname": "gname2"
    "email": "email2"
    "photoUrl": "photoUrl2"
  },
}

最后一点:由于数据是从Firebase异步加载的,因此您无法返回该节点是否存在。要详细了解其含义以及常见的解决方法(定义回调接口),请参见getContactsFromFirebase() method return an empty list