0

我已创建名称为Users的节点。我想创建一个名为Uid的子节点,该节点注册自己并将其所有配置文件信息存储在该子节点中。无法将数据添加到Firebase数据库

只有在用户已成功注册到数据库时才会发生。所以我用了下面的代码:

     mAuth.createUserWithEmailAndPassword(user.getEmail(), password) 
           .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
            @Override 
            public void onComplete(@NonNull Task<AuthResult> task) { 
             Log.d("MainActivity", "signIn:onComplete:" + task.isSuccessful()); 

             if (task.isSuccessful()) { 
              DatabaseReference userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
              userDatabaseReference.child(task.getResult().getUser().getUid()) 
                .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { 
               @Override 
               public void onComplete(@NonNull Task<Void> task) { 
                Toast.makeText(ResetPassword.this, "user registred to database", Toast.LENGTH_SHORT).show(); 
                Intent intent = new Intent(ResetPassword.this, MainActivity.class); 
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                startActivity(intent); 
               } 
              }); 

             } else { 
              Toast.makeText(ResetPassword.this, "Registration Failed", 
                Toast.LENGTH_SHORT).show(); 
             } 
            } 
           }); 

但是我的代码不工作。用户已成功注册,但数据库中未创建任何子项。应该使用用户的UID的名称创建。

当我加入断点如下所示:

我发现,编译器直接转移到线LINE无82后106不执行之间的任何行,但仍然它调用被称为在MainActivity里面完成。

我不明白这是怎么回事。提前致谢。

回答

0

变化 userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo)

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).push().setValue(userInfo) 
+0

这将在uid节点中生成一个带有推式ID的子代。我不认为这是OP想要的。 –

+0

然后只需使用.set()而不是.push() –

0

也许FirebaseAuthentication.currentUser尚未初始化。尝试获得它从作为参数传递给onComplete方法任务UID:

if (task.isSuccessful()) { 
         userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
         userDatabaseReference.child(task.getResult().getUser().getUid()).setValue(userInfo).addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
          } 
         }); 

        } 
0

更新您完成听众的onComplete()看到失败的原因是什么:

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo) 
     .addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     if (task.isSuccessful()) { 
      Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
     } else { 
      System.out.println("onComplete: " + task.getException().getMessage()); 
     } 
    } 
}); 

可能有问题,你数据库安全规则。

0

实际上问题出在与Firebase的连接上。我没有使用与Firebase相同的帐户登录android studio,这就是为什么我无法与Firebase进行通信。