首页 > 解决方案 > 首次登录后,电子邮件注册用户 displayName 不显示在导航标题中(Firebase)

问题描述

当用户第一次在我的应用程序中登录时,他会进入“欢迎屏幕”,在其中输入用户名。单击按钮后,他进入 MainActivity,其中 NavigationDrawer 应该是他创建的用户名。问题是用户名仅在他注销并再次登录后才会显示。

displayName 也显示在另一个 Activity 中的另一个 TextView 中,并以正确的方式显示。在该活动中,我使用以下代码:

// This code works as expected

namePlayer1 = view.findViewById(R.id.name_player_1);
        FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
        String userName =user.getDisplayName();
        namePlayer1.setText(userName);

因此,如果您将其与下面的代码进行比较,您会发现问题仅在使用 NavigationDrawer 时出现。

我知道这是 Firebase Android SDK v9.8.0 中的一个错误,但现在应该已经解决了吗?

这是我所指的问题: displayName 在使用 Firebase Auth 创建用户后显示为空

这是我的 MainActivity,它有一个导航抽屉:

...

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);
            DrawerLayout drawer = findViewById(R.id.drawer_layout);
            NavigationView navigationView = findViewById(R.id.nav_view);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.addDrawerListener(toggle);
            toggle.syncState();
            navigationView.setNavigationItemSelectedListener(this);

            // Displays the username in the nav_header
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            String userName = user.getDisplayName();
            View header = navigationView.getHeaderView(0);
            TextView text = header.findViewById(R.id.username);
            text.setText(userName);

...

标签: androidfirebasefirebase-authentication

解决方案


很可能这只是一个赛车问题。您注册了用户,但在注册用户详细信息之前太快进入下一个活动。

试听注册:

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)

推荐阅读