Электронная почта зарегистрированных пользователей DISPLAYNAME не отображается после первого входа в систему

голоса
0

Когда пользователь входит в систему в первый раз , он получает на экране приветствия , где он печатает в имени пользователя. После нажатия на кнопку , он попадает в MainActivity , где в NavigationDrawer должен быть его создал имя пользователя. Проблема заключается в том , что имя пользователя отображается только после того, как он выходит из и снова. Я знаю , что это было ошибкой в v9.8.0 Firebase Android SDK , но это должен быть решен уже в порядке? Есть ли что - то случилось с моим кодом , или это все - таки ошибка? Вот вопрос , который я имею в виду: DISPLAYNAME показывает нуль после создания пользователя с Firebase Auth

Вот активность, когда пользователь создает имя пользователя и в основном переписывает «Null» имя пользователя:


...

firstScreenButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

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

                String usernameInput = username.getText().toString();

                String currentUserName =user.getDisplayName();

                ...

                // When the user typed in a username he gets to the MainActivity
                } else {
                    createUsername();
                    saveUsername();
                    Intent intent = new Intent (CreateUsername.this, MainActivity.class);
                    startActivity(intent);
                    Toast.makeText(CreateUsername.this, Welcome + currentUserName, Toast.LENGTH_SHORT).show();
                    finish();
                    }
            }
        });

    }
// Here I save the typed in username to to firestore
public void saveUsername (){

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

        String email = userMail.getEmail();

        String newUser = username.getText().toString();

        String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();

        Map<String, Object> user = new HashMap<>();
        user.put(KEY_USERNAME, newUser);

         ...
// 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

    // TODO: 2019-10-08 Fix the method so the username is displayed right after creating it

    public void createUsername (){

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

        String usernameInput = username.getText().toString();

        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);
                        }
                    }
                });

...

Кроме того, сообщение тост, который отображается после того, как пользователь создал имя, возвращает «Welcome нуль», так это будет означать, что в данный момент имя пользователя не было обновлено.

Задан 09/10/2019 в 12:01
источник пользователем
На других языках...                            


2 ответов

голоса
1

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

FirebaseAuth.getInstance().getCurrentUser().reload().addOnCompleteListener(activity, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // goToNextActivity
            }
        });
Ответил 18/11/2019 в 12:41
источник пользователем

голоса
1

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

Попробуйте прислушаться к регистрации:

currentUser.updateProfile(profileUpdates)
             .addOnCompleteListener(new OnCompleteListener<Void>()
             {
                 @Override
                 public void onComplete(@NonNull Task<Void> task)
                 {
                     if (task.isSuccessful())
                     {
                         //TODO: move to MainActivity
                         Log.d(TAG, "User profile updated.");
                     }
                 }
         });

или просто передать имя в MainActivity с помощью

Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("username", username);
startActivity(intent)
Ответил 18/11/2019 в 12:43
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more