E-mail geregistreerde gebruikers displayName wordt niet weergegeven na de eerste login

stemmen
0

Wanneer een gebruiker zich voor de eerste keer dat hij krijgt om een welkomstscherm waar hij types in een gebruikersnaam. Na het klikken op een knop krijgt hij de MainActivity waar in de NavigationDrawer zijn gemaakt gebruikersnaam moet zijn. Het probleem is, dat de gebruikersnaam wordt alleen weergegeven nadat hij zich afmeldt en weer in. Ik weet dat dit een fout is in de Firebase Android SDK v9.8.0 maar dit moet worden opgelost door nu toch? Is er iets mis met mijn code of is het nog steeds een bug? Hier is de vraag die ik heb het over: displayName tonen null na het maken van gebruikersaccounts met Firebase Auth

Hier is de activiteit waar de gebruiker een gebruikersnaam creëert en in principe overschrijft de Null gebruikersnaam:


...

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

...

Ook de toast boodschap die wordt weergegeven nadat de gebruiker een gebruikersnaam gemaakt, keert terug Welcome null dus dit zou betekenen dat op dit punt de gebruikersnaam is niet bijgewerkt.

De vraag is gesteld op 09/10/2019 om 12:01
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

Probeer opnieuw te laden gebruiker nadat u de weergave naam gebruiker ingesteld voordat u naar de volgende activiteit.

FirebaseAuth.getInstance().getCurrentUser().reload().addOnCompleteListener(activity, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // goToNextActivity
            }
        });
antwoordde op 18/11/2019 om 12:41
bron van user

stemmen
1

De kans is groot dat het gewoon een race-probleem. U ondertekent de gebruiker, maar gaan te snel naar de volgende activiteit voor de gegevens van de gebruiker worden geregistreerd.

Probeer om de registratie te luisteren:

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

of gewoon langs de naam aan de MainActivity behulp

Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("username", username);
startActivity(intent)
antwoordde op 18/11/2019 om 12:43
bron van user

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