Returing всегда ложно, если электронная почта существует или нет - PullRequest
1 голос
/ 14 мая 2019

Я проверяю, зарегистрирован ли адрес электронной почты или нет

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 голосов
/ 14 мая 2019

Если вы добавите двух пользователей, то, как вы добавляете код, приведет к такой структуре:

"googleRef": {
  "userID": {
    "-Ldfs32189eqdqA1": "userID1",
    "-Ldfs32189eqdqA5": "userID2"
  },
  "gname": {
    "-Ldfs32189eqdqA2": "gname1",
    "-Ldfs32189eqdqA6": "gname2"
  },
  "email": {
    "-Ldfs32189eqdqA3": "email1",
    "-Ldfs32189eqdqA7": "email2"
  },
  "photoUrl": {
    "-Ldfs32189eqdqA4": "photoUrl1",
    "-Ldfs32189eqdqA8": "photoUrl2"
  }
}

Таким образом, у вас есть отдельный сгенерированный push-идентификатор (ключи, начинающиеся с -) для каждого свойства каждого пользователя, что весьма необычно.

Более идиоматическая форма хранения пользовательской информации:

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

Или (еще лучше) это:

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

Причины, по которым эти последние два являются более распространенными, заключаются в том, что они группируют информацию для каждого пользователя вместе, что упрощает / делает возможным поиск информации для каждого пользователя. В обоих этих случаях вы можете найти пользователей с определенным адресом электронной почты по вашему запросу.

Причина, по которой последний вариант является наилучшим, заключается в том, что информация для каждого пользователя хранится под идентификатором пользователя, который уже гарантированно будет уникальным. Эта структура делает возможным поиск информации о пользователях по их UID без запроса.

Чтобы написать структуру, подобную последней, используйте:

Map<String, Object> values = new HashMap<>();
values.put("gname", userName)
values.put("email", reEmail)
values.put("photoUrl", userpicUrl)
googleRef.child(userId).setValue(values)

Последнее замечание: вы не можете вернуть , существует ли узел или узел, так как данные загружаются из Firebase асинхронно. Чтобы узнать больше о том, что это значит, и об общем обходном пути (который должен определить интерфейс обратного вызова), см. Метод getContactsFromFirebase (), возвращающий пустой список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...