Как использовать результат запроса для отображения всплывающего сообщения и создания нового пользователя в Firebase Firestore? - PullRequest
0 голосов
/ 10 октября 2019

В моем приложении пользователь, впервые вошедший в систему, попадает на экран «Создать имя пользователя», где он набирает свой предпочтительный username в EditText. То, что я хочу сделать, это взять ввод и посмотреть, существует ли уже имя пользователя, и отображает ли оно всплывающее сообщение, если оно не обновляет displayName пользователя.

Редактировать:

Код ниже работает (использовал ответ @AlexMamo)


...

// Creates a new username for the new user, which is displayed in the menu but only when the user closes and opens the app again
    public void createUsername (){

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        //Gets the input of the EditText that the user typed in his preferable username
        String usernameInput = username.getText().toString();

        // Here should be a method that creates a new username if the query did not find a matching document or display a toast if the document (username) already exists
        db.collection("User").document(usernameInput).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {

                        Toast.makeText(CreateUsername.this, "This username is already in use.", Toast.LENGTH_LONG).show();

                    } else {
                        UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                .setDisplayName(usernameInput)
                                .build();

                        user.updateProfile(profileUpdates)
                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {
                                            Log.d(TAG, "Success");
                                        }
                                    }
                                });
                    }
                }
            }
        });
    }

...

1 Ответ

3 голосов
/ 10 октября 2019

Чтобы проверить, существует ли конкретное имя пользователя в базе данных или нет, пожалуйста, измените следующую строку кода:

Query userNames = db.collection("User").whereEqualTo(usernameInput, true);

на

Query userNames = db.collection("User").whereEqualTo("username", usernameInput);

Таким образом, вы должны проверить это *Свойство 1007 * содержит имя пользователя, которое вменяется в ваше EditText.

Редактировать:

Поскольку вы сохраняете в качестве идентификатора документа usernameПожалуйста, смотрите мой код ниже, где вам не нужно, если заявление:

db.collection("User").document(usernameInput).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Toast.makeText(this, "This username is already taken. Please choose another.", Toast.LENGTH_LONG).show();
            } else {
                Log.d(TAG, "No such document");
            }
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...