我的 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 的最后一部分,其中我已經解釋了如何使用自定義回調來完成它。您也可以觀看此視頻以更好地理解。
添加回答
舉報
0/150
提交
取消