【问题标题】:Unable to add data to Firebase database无法将数据添加到 Firebase 数据库
【发布时间】:2017-02-12 18:23:22
【问题描述】:

我创建了一个名为 Users 的节点。我想创建一个名为Uid 的子节点,该用户注册自己并将他/她的所有个人资料信息存储在该子节点中。

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

                        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 名称创建。

当我添加断点时,如下所示:

我发现编译器在第 82 行之后直接进入第 106 行,中间没有执行任何行,但它仍然调用了在完成时调用的 MainActivity。

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

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

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

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

    【讨论】:

    • 这将在 uid 节点内生成一个具有推送 id 的子节点。我认为这不是 OP 想要的。
    • 那就用 .set() 代替 .push()
    【解决方案2】:

    可能FirebaseAuthentication.currentUser 尚未初始化。尝试从作为参数传递给onComplete 方法的Task 中获取它的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();
                                }
                            });
    
                        }
    

    【讨论】:

      【解决方案3】:

      更新你的完成监听器的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());
              }
          }
      });
      

      可能是您的数据库安全规则有问题。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2019-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          相关资源
          最近更新 更多