无法将数据添加到Firebase数据库

时间:2017-02-12 18:23:22

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

我创建了一个名为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。

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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();
                            }
                        });

                    }

答案 2 :(得分: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());
        }
    }
});

您的数据库安全规则可能存在问题。

答案 3 :(得分:0)

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