Checking if a particular value exists in the Firebase database
Проверка наличия определенного значения в базе данных Firebase
Я создаю приложение для Android с использованием Firebase базы данных реального времени. Когда новый пользователь регистрируется в моем приложении, данные этого пользователя сохраняются в базе данных Firebase.
Для регистрации пользователь должен предоставить следующие данные:
Полное имя
Электронная почта
Имя пользователя
Пароль
Структура базы данных
Всякий раз, когда новый пользователь пытается зарегистрироваться, я должен убедиться, что имя пользователя каждого пользователя уникально, поэтому я проверяю базу данных, username введенное пользователем, уже существует в базе данных или нет.
Моя логика, лежащая в основе этого метода, заключается в том, что если getReference метод не может найти ссылку на указанный путь, он вернет null, чтобы я мог вернуть, есть fdbRefer это null или нет. Если fdbRefer есть null, то это означает, что username не существует в базе данных.
Проблема
Проблема с этим методом заключается в том, что он всегда возвращает, true независимо от того, существует ли введенное username значение в базе данных или нет. Что привело меня к мысли, что fdbRefer никогдаnull.
Это подводит меня к моему вопросу...
Вопрос
Что возвращает getReference метод, когда он не может найти указанный путь в firebase базе данных, и каков правильный способ проверить, существует ли username уже в базе данных или нет?
Переведено автоматически
Ответ 1
Чтобы проверить существование пользователя, пожалуйста, используйте приведенный ниже код:
DatabaseReferencerootRef= FirebaseDatabase.getInstance().getReference(); DatabaseReferenceuserNameRef= rootRef.child("Users").child("Nick123"); ValueEventListenereventListener=newValueEventListener() { @Override publicvoidonDataChange(DataSnapshot dataSnapshot) { if(!dataSnapshot.exists()) { //create new user } }
Это еще один подход, который проходит через весь Users узел, но не использует просто прямую ссылку на одного пользователя. Эта опция, скорее всего, будет использоваться, когда вы используете в качестве уникального идентификатора для пользователей uid вместо имени пользователя (как вы делаете прямо сейчас). Итак, если структура вашей базы данных может выглядеть примерно так:
Существует также другое решение, которое предполагает создание другого узла с именем userNames, в котором вы можете хранить только уникальные имена пользователей. Пожалуйста, также ознакомьтесь ниже с соответствующими правилами безопасности:
Вы должны использовать orderbychild и equalto, чтобы проверить значение, если оно там есть. Если вы не используете orderbychild и equalto, то он просто проверит, существует ли username дочерний узел, и значение его не волнует.
это orderByChild("username").equalTo(Nick123) все равно что сказать: