[英]FireBase getUid Coming Back As Null After Returning a Value
我正在嘗試使用用戶 ID 創建一個孩子。 我在這里創建用戶時找到了ID,並在logcat中獲取了userID:
final String fullName = findViewByid(R.id.fullName);
.
. // Other strings declared here
.
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser newUserID = mAuth.getCurrentUser();
userID = newUserID.getUid();
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
檢查了 logcat,看到了 userID 變量。 檢查身份驗證控制台,並得到“身份驗證完成:真//id:userid”。
這就是問題所在。
public void onComplete(@NonNull Task<AuthResult> task) {
.
.
.
});
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
Log.w(TAG, "idcheck:" + userID);
**reference.child(userID).setValue(newUser);**
我再次檢查了我的 logcat,我得到了“身份驗證完成:真//id:userid”“idcheck:null”。
我嘗試過的事情:
我以前讓它工作但不確定如何工作,所以我知道這是可能的。 TIA!
更新:
我將變量設為全局變量而不是最終變量。 它現在按預期工作。
public class(){
String fullName;
public void signUp(){
public void onComplete(@NonNull Task<AuthResult> task) {
});
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
Log.w(TAG, "idcheck:" + userID);
reference.child(userID).setValue(newUser);
看起來您正在嘗試在onComplete
回調之外訪問userID
,這是行不通的。
這樣做的原因是身份驗證是異步發生的,並且在您的reference.child(userID).setValue(newUser)
運行時, userID = newUserID.getUid()
尚未運行。 如果您在調試器中運行代碼並在這些行上放置斷點,或者向它們添加一些日志記錄,您可以很容易地看到這一點。
任何需要 UID 的代碼都需要在用戶登錄完成時調用的onComplete
內部,或者從那里調用。
所以:
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser newUserID = mAuth.getCurrentUser();
userID = newUserID.getUid();
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
reference.child(userID).setValue(newUser);
...
});
另見:
所以我把我的變量設為全局變量。 輕微打嗝。 編輯在更新的帖子中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.