为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 FirebaseUser DisplayName 不更新?

为什么 FirebaseUser DisplayName 不更新?

慕斯709654 2022-06-30 18:39:01
我的 Firebase 身份验证是基于电子邮件的(登录和注册只需要一个电子邮件和密码),然后由 firebase 管理。我的 RegistrationActivity 也要求提供电子邮件、密码和姓名,因为我想稍后在我的 AccountActivity 中使用它,以便在登录后获得类似“Hello,[Name]”的内容。幸运的是,为了保存这个名称, FirebaseUser 已经有一个名为 DisplayName 的字段,所以我所要做的就是在创建用户后立即更新用户( createUserWithEmailAndPassword(...) 也会自动执行“登录”)RegisterActivity相关代码:firebaseAuth.createUserWithEmailAndPassword(email, password)                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {                    @Override                    public void onComplete(@NonNull Task<AuthResult> task) {                        if (!task.isSuccessful()) {                            Toast.makeText(RegisterActivity.this, "Could not complete registration", Toast.LENGTH_SHORT).show();                        } else {                            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();                            UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()                                    .setDisplayName(name).build();                            user.updateProfile(profileUpdates);                            Toast.makeText(RegisterActivity.this, "Update complete", Toast.LENGTH_SHORT).show();                            startActivity(new Intent(RegisterActivity.this, AccountActivity.class));                            finish();                        }                    }                });但是,一旦 AccountActivity 启动,应该包含 FirebaseUser DisplayName 的 TextView 为空。只有在按下后,它才会再次打开相同的 AccountActivity(为什么?)并且 TextView 会使用 DisplayName 进行更新。但是“返回”功能应该完全关闭应用程序。我错过了什么或做错了什么?我的假设是,在登录时,更新当前登录的用户在再次启动 Activity 之前不会改变它,但我怀疑情况是否如此,因为在 AccountActivty 上按下后会首先使用正确的 DisplayName 再次打开它,然后再次按回将正确关闭它。为什么先按回不关闭它,而是将 TextView 更新为正确的 DisplayName?为什么第一次没有正确更新?很抱歉,如果我没有发布所有必要的信息,请告诉我。
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

要解决这个问题,只需移动以下代码行:

accountTextView.setText(user.getDisplayName());

在回调内部,紧随其后:

Toast.makeText(RegisterActivity.this, "Update complete", Toast.LENGTH_SHORT).show();

尝试在回调之外设置用户名没有任何意义,因为 Firebase API 是异步的。因此,解决此问题的最快解决方案(如您所见)是user.getDisplayName()仅在onComplete()方法内部使用。如果您想在回调之外使用它,我建议您从这篇文章中查看我的 anwser 的最后一部分,其中我已经解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信