Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FireBase getUid在返回值后返回为Null_Java_Android_Firebase_Firebase Authentication - Fatal编程技术网

Java FireBase getUid在返回值后返回为Null

Java FireBase getUid在返回值后返回为Null,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我正在尝试使用用户ID创建子项。我在此处创建用户时找到了该ID,并在logcat中获得了该用户ID: final String fullName = findViewByid(R.id.fullName); . . // Other strings declared here . public void onComplete(@NonNull Task<AuthResult> task) {

我正在尝试使用用户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);
                        
final String fullName=findviewbyd(R.id.fullName);
. 
.    // 此处声明的其他字符串
.
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
FirebaseUser newUserID=mAuth.getCurrentUser();
userID=newUserID.getUid();
Log.w(标记“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);**
public void onComplete(@NonNull任务){
.
.
.
});
Log.w(标记“AuthenticationComplete:true//id:+userID”);
BasicUser newUser=newbasicuser(全名、uname、userEmail、密码、confirmPassword、city、newState、zip、type);
Log.w(标记“idcheck:+userID”);
**reference.child(userID).setValue(newUser)**
我再次检查了日志,得到“身份验证完成:true//id:userid” “idcheck:null”

我尝试过的事情:

  • 将子项更改为uname(另一个字符串变量)。数据按预期发布到实时数据库中
  • 将“”放在用户ID周围。我不确定它会做什么,但值得一试
  • 在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);
   
public类(){
字符串全名;
公开无效注册(){
未完成的公共void(@NonNull任务){
});
Log.w(标记“AuthenticationComplete:true//id:+userID”);
BasicUser newUser=newbasicuser(全名、uname、userEmail、密码、confirmPassword、city、newState、zip、type);
Log.w(标记“idcheck:+userID”);
reference.child(userID).setValue(newUser);

看起来您试图在
onComplete
回调之外访问
userID
,但该回调不起作用

这是因为身份验证是异步进行的,在运行
reference.child(userID).setValue(newUser)
时,
userID=newUserID.getUid()
尚未运行。如果您在调试器中运行代码,并在这些行上放置断点,或者在这些行中添加一些日志记录,则最容易看到这一点

任何需要UID的代码都需要在用户登录完成时调用的
onComplete
中,或者从那里调用

因此:

public void onComplete(@NonNull Task,用于实时数据库,但处理相同的问题,包含较长的解释和示例

  • 因此,我将变量设置为全局变量。有点小问题。编辑内容在更新后的帖子中。

    请编辑问题,以完整显示不工作的代码,而不是将其拆分。我尝试过,但我没有将变量设置为全局变量。我这样做时,它工作正常。谢谢!
     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);
    
             ...
    });