亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號