E-post registrerte brukere display vises ikke etter første innlogging

stemmer
0

Når en bruker logger på for første gang får han en velkomstskjermen der han skriver inn et brukernavn. Etter å ha klikket på en knapp han kommer til MainActivity hvor i NavigationDrawer bør være hans skapte brukernavn. Problemet er at brukernavnet ikke vises før han logger ut og inn igjen. Jeg vet at dette har vært en feil i Fire Android SDK v9.8.0 men dette bør være løst nå rett? Er det noe galt med min kode eller er det fortsatt en bug? Her er spørsmålet jeg henviser til: display viser null etter å lage bruker med Fire Auth

Her er en aktivitet der brukeren oppretter et brukernavn og i utgangspunktet overskriver Null brukernavn:


...

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

...

Også toast meldingen som vises etter at brukeren har opprettet et brukernavn, returnerer Velkommen null slik at dette ville bety at på dette punktet brukernavn ikke er oppdatert.

Publisert på 09/10/2019 klokken 12:01
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Prøve å oppdatere bruker etter at du har satt brukers visningsnavn før du går til neste aktivitet.

FirebaseAuth.getInstance().getCurrentUser().reload().addOnCompleteListener(activity, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // goToNextActivity
            }
        });
Svarte 18/11/2019 kl. 12:41
kilden bruker

stemmer
1

Sjansene er det er bare en racing problem. Du registrerer brukeren opp, men flytter for fort til neste aktivitet før brukerens detaljer er registrert.

Prøv å lytte til registrering:

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

eller bare passere navn til MainActivity hjelp

Intent intent = new Intent(this, MainActivity.class)
intent.putExtra("username", username);
startActivity(intent)
Svarte 18/11/2019 kl. 12:43
kilden bruker

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