返回值后返回为Null的FireBase getUid



我正试图使用用户的ID创建一个孩子。我在这里创建用户时找到了ID,并在logcat:中获得了用户ID

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变量。检查了auth控制台,得到了";身份验证完成:true//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);**

我再次查看了我的日志,我得到了";身份验证完成:true//id:userid";"idcheck:null";。

我尝试过的东西:

  • 将子项更改为uname(另一个String变量(。数据已按预期发布到实时数据库中
  • 将"quot"围绕userID。不确定我认为它会做什么,但值得一试
  • 将所有字符串和底部代码放置在onComplete方法中

我以前也用过,但不确定怎么用,所以我知道这是可能的。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);
...
});

另请参阅:

  • getContactsFromFirebase((方法返回一个空列表,该列表用于实时数据库,但处理相同的问题,并包含更长的解释和示例
  • 无法获取kotlin中firebase的当前用户

所以我将变量设为全局变量。轻微打嗝。编辑内容在更新后的帖子中。

相关内容

最新更新