Firestore query - checking if username already exists
Запрос Firestore - проверка, уже существует ли имя пользователя
Мне нужна помощь с запросами Firestore. У меня есть all_users сбор данных, документы с идентификаторами пользователей с информацией о каждом пользователе. изображение базы данных firestore я хочу проверить, существует ли имя пользователя уже. я понимаю, как получить () документы и сравнить, как показано на их веб-странице, но как насчет запроса данных?, это мой код
обновление виджетов - (если текстовое поле mUser и текущее имя пользователя не совпадают)
privatevoidsaveProfileSettings(){ finalStringusername= mUsername.getText().toString(); //Case 1: user did not change their username if (!mUsers.getUsername().equals(username)){
if (documentSnapshots != null){ Log.d(TAG, "onEvent: username does not exists"); Toast.makeText(getActivity(), "Username is available", Toast.LENGTH_SHORT).show(); } for (DocumentSnapshot ds: documentSnapshots){ if (ds.exists()){ Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH: " + ds.toObject(Users.class).getUsername()); Toast.makeText(getActivity(), "That username already exists.", Toast.LENGTH_SHORT).show(); } } } }); }
Я не получаю никаких ошибок и не получаю результатов. Я искал везде и не видел проблем, похожих на мои. Плюс не так много запросов, с которыми я мог бы работать. буду признателен за любое исправление, заранее спасибо.
ОБНОВЛЕНИЕ : после нескольких дней поиска я действительно нашел решение с помощью ответов, которые я получил ниже. итак, поскольку firestore не имеет операционной логики, и вы хотите обновить, если имя пользователя не существует, с помощью .wherequalto , используйте задачу для поиска, которая содержит какую-либо полезную нагрузку.
if (task.isSuccessful()){ for (DocumentSnapshot ds: task.getResult()){ StringuserNames= ds.getString("username"); if (userNames.equals(usernameToCompare)) { Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH -username already exists"); Toast.makeText(getActivity(), "username already exists", Toast.LENGTH_SHORT).show(); } } } //checking if task contains any payload. if no, then update if (task.getResult().size() == 0){ try{
Log.d(TAG, "onComplete: MATCH NOT FOUND - username is available"); Toast.makeText(getActivity(), "username changed", Toast.LENGTH_SHORT).show(); //Updating new username............
Следующий запрос возвращает всех пользователей с предоставленной usernameToCheck . Если имя пользователя уникально, вы получите только один documentSnapShot.
Кроме того, вы написали, что не получаете никакого результата, так что можно ли с уверенностью предположить, что вы ожидаете увидеть тосты, но не можете этого сделать?
Кроме того, после беглого просмотра вашего кода я поместил комментарии, основанные на этой документации :
if (documentSnapshots != null){ // you are checking here whether your querySnapshot is not null // instead of checking whether it is null or empty. // taking a wild guess here but could try to modify // your if condition as follows --> // if (documentSnapshots.isEmpty()) { Log.d(TAG, "onEvent: username does not exists"); Toast.makeText(getActivity(), "Username is available", Toast.LENGTH_SHORT).show(); } // below as well documentSnapshots is assumed to be not null, // hence all the more reason I am taking the above wild guess for (DocumentSnapshot ds: documentSnapshots){ if (ds.exists()){ Log.d(TAG, "checkingIfusernameExist: FOUND A MATCH: " + ds.toObject(Users.class).getUsername()); Toast.makeText(getActivity(), "That username already exists.", Toast.LENGTH_SHORT).show(); } } } });
Я не могу продолжить отладку предоставленных вами данных. Но эта ссылка может помочь вам больше.