E-mail les usagers enregistrés DisplayName n'est pas affiché après la première connexion

voix
0

Lorsqu'un utilisateur se connecte pour la première fois , il arrive à un écran d' accueil où il tape un nom d' utilisateur. Après avoir cliqué sur un bouton , il arrive à la MainActivity où dans le NavigationDrawer devrait être son nom d' utilisateur créé. Le problème est que le nom d' utilisateur n'est affiché après qu'il se déconnecte et à nouveau. Je sais que cela a été un bogue dans le Firebase SDK Android v9.8.0 mais cela devrait être résolu maintenant droit? Y at - il quelque chose de mal avec mon code ou est - ce encore un bug? Voici la question que je me réfère à: displayName montrant null après avoir créé l' utilisateur avec Firebase Auth

Voici l'activité où l'utilisateur crée un nom d'utilisateur et le nom d'utilisateur essentiellement remplace « 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);
                        }
                    }
                });

...

Aussi le message de pain grillé qui est affiché après que l'utilisateur a créé un nom d'utilisateur, retourne « null Bienvenue » alors cela signifierait que, à ce stade, le nom d'utilisateur n'a pas été mis à jour.

Créé 09/10/2019 à 12:01
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Essayez utilisateur rechargeant après avoir défini le nom d'affichage de l'utilisateur avant de passer à l'activité suivante.

FirebaseAuth.getInstance().getCurrentUser().reload().addOnCompleteListener(activity, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // goToNextActivity
            }
        });
Créé 18/11/2019 à 12:41
source utilisateur

voix
1

Il y a des chances qu'il est juste un problème de course. Vous signez l'utilisateur, mais aller trop vite à l'activité suivante avant sont enregistrées les données de l'utilisateur.

Essayez d'écouter l'enregistrement:

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

ou simplement le nom de la MainActivity en utilisant

Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("username", username);
startActivity(intent)
Créé 18/11/2019 à 12:43
source utilisateur

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