Мне нужна помощь с запросами Firestore. У меня есть all_users
коллекция данных, пользовательские id-документы с информацией о каждом пользователе. образ базы данных firestore, я хочу проверить, существует ли уже имя пользователя. Я понимаю, как получить () документы и сравнить, как показано на их веб-странице, но как насчет запроса данных? Это мой код
обновление виджетов - (если текстовое поле mUser и текущее имя пользователя не совпадают)
private void saveProfileSettings(){
final String username = mUsername.getText().toString();
//Case 1: user did not change their username
if (!mUsers.getUsername().equals(username)){
checkingIfusernameExist(username);
}else {
}
}
checkIfusernameExist метод
private void checkingIfusernameExist(final String username){
Log.d(TAG, "checkingIfusernameExist: Checking if " + username + " Exists");
Query mQuery = mFirebaseFirestore.collection("all_users")
.orderBy(getString(R.string.fields_username))
.whereEqualTo("username", username);
mQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
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 не имеет операционной логики, и вы хотите обновить, если имя пользователя не существует с .whereEqualTo, используйте задачу поиска, содержащую любую полезную нагрузку.
код, который работал у меня
checkIfUsernameExists метод
private void checkingIfusernameExist(final String usernameToCompare){
//----------------------------------------------------------------
final Query mQuery = mFirebaseFirestore.collection("all_users").whereEqualTo("username", usernameToCompare);
mQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
Log.d(TAG, "checkingIfusernameExist: checking if username exists");
if (task.isSuccessful()){
for (DocumentSnapshot ds: task.getResult()){
String userNames = 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............
}catch (NullPointerException e){
Log.e(TAG, "NullPointerException: " + e.getMessage() );
}
}
}
});