如何从实时数据库中获取用户名并将其显示在导航 header 中?

How can I get username from real time database and show it in navigation header?

在注册活动中注册按钮

public void registerBtnClicked(View view){

    String email = binding.userEmailEditText.getText().toString();
    String password = binding.userPasswordEditText.getText().toString();
    String userNameData =  binding.usernameEditText.getText().toString();

    user = new Users(userNameData,email,password);
    db = FirebaseDatabase.getInstance();
    databaseReference = db.getReference(Users.class.getSimpleName());
    databaseReference.push().setValue(user);


    if(email.equals("") || password.equals("")){
        Toast.makeText(this, "Enter email and password", Toast.LENGTH_LONG).show();
    }else{
        auth.createUserWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                Intent intent = new Intent(RegisterPage.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(RegisterPage.this, e.getLocalizedMessage(),Toast.LENGTH_LONG).show();
            }
        });
    }

}

我创建了一个实时 database.But 我不知道如何在导航 header 部分显示用户名。你能帮帮我吗?

如果我理解正确,当您尝试从中读取显示名称时,firebaseUser 为空。这其实是一个常见的场景,因为用户的sign-in会话是由Firebase在后台管理的,当前用户随时可能发生变化。

简单的解决方法是在访问他们的显示名称之前检查是否有当前用户,您可以这样做:

firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) {
    navUserEmail.setText(firebaseUser.getEmail());
    navUserName.setText(firebaseUser.getDisplayName());
}

请注意,显示名称是用户配置文件的可选 属性,因此它确实可以是 null。如果你不想在这种情况下显示任何内容,你可以这样做:

String displayName = firebaseUser.getDisplayName();
navUserName.setText(displayName != null ? displayName : "");

即使您设置了用户的显示名称,也最多可能需要一个小时才能为所有连接的客户端更新该名称,因为它们都缓存了用户配置文件。由于此类更新发生在后台...

要正确处理所有身份验证状态更改,您需要使用身份验证状态侦听器,如本文所示:https://whosebug.com/collectives/google-cloud/articles/68104924/listen-for-authentication-state-in-android