firebase getuid在返回值后返回为null

gg0vcinb  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(304)

我正在尝试使用该用户的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变量。检查了身份验证控制台,得到了“身份验证”complete: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);**

我又查了一遍日志,我得到了“身份验证”complete:true //id:userid“”idcheck:null“。
我尝试过的事情:
将子项更改为uname(另一个字符串变量)。数据已按预期发布到实时数据库中
将“”放在userid周围。我不知道我认为它会做什么,但值得一试
在oncomplete方法中放置所有字符串和底部代码
我以前用过,但不知道怎么用,所以我知道这是可能的。蒂亚!
更新:
我让变量是全局的而不是最终的。现在一切正常。

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);
vsaztqbk

vsaztqbk1#

看起来你想进入 userID 外面的 onComplete 回拨,这是行不通的。
这是因为身份验证是异步进行的,并且在 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当前用户

m1m5dgzv

m1m5dgzv2#

所以我把变量设为全局变量。轻微打嗝。已更新的帖子中有编辑。

相关问题