【问题标题】:Firebase Authentication User UID as child node in Realtime DatabaseFirebase 身份验证用户 UID 作为实时数据库中的子节点
【发布时间】:2020-07-31 17:09:59
【问题描述】:

我正在尝试在我的实时数据库中创建一个名为“users”的文件夹,其唯一标识符是 Firebase 创建的 UID。

此代码在几个月前有效。但它不再。坦率地说,我做了这么多的改变,我不知道是不是我删除的东西……但我找不到哪里出了问题。用户已创建,但在我的实时数据库的“用户”中没有写入任何内容。

                auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            auth.signInWithEmailAndPassword(inputEmail.getText().toString(),inputPassword.getText().toString());
                            Toast.makeText(SignUpActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                            // If sign in fails, display a message to the user. If sign in succeeds
                            // the auth state listener will be notified and logic to handle the
                            // signed in user can be handled in the listener.
                            if (!task.isSuccessful()) {
                                Toast.makeText(SignUpActivity.this, "Authentication failed." + task.getException(),
                                        Toast.LENGTH_SHORT).show();
                            } else {
                                auth.signInWithEmailAndPassword(inputEmail.getText().toString(),inputPassword.getText().toString());
                                FirebaseUser firebaseUser = auth.getCurrentUser();
                                String userid = firebaseUser.getUid();
                                final User newuser = new User(signupInputUsername.getText().toString().trim(), inputEmail.getText().toString().trim(), inputPassword.getText().toString().trim(),
                                        gender.getText().toString().trim(), age.getText().toString().trim());
                                mDatabase.child("users").child(userid).setValue(newuser);
                                startActivity(new Intent(SignUpActivity.this, UserActivity.class));
                                finish();
                            }
                        }
                    });

 @IgnoreExtraProperties
public static class User {

    public String username, inputEmail, inputPassword, gender, age;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String username, String inputEmail, String inputPassword, String gender, String age) {
        this.username = username;
        this.inputEmail = inputEmail;
        this.inputPassword = inputPassword;
        this.gender = gender;
        this.age = age;
    }

}

【问题讨论】:

  • 检查数据库规则。你有什么错误吗?
  • 此外 .setvalue 给你一个任务,你在完成之前移动到下一个活动,这可能会取消任务
  • 在您对 Firebase API 进行的调用中,您的代码根本没有检查任何地方的错误。事情可能会出错,你永远不会知道。

标签: android firebase firebase-authentication


【解决方案1】:

从您的代码中查看以下代码

mDatabase.child("users").child(userid).setValue(newuser);
startActivity(new Intent(SignUpActivity.this, UserActivity.class));
finish();

.setValue 方法实际上给了你一个任务,它不是一个 void 函数,所以你应该给它附加一个监听器并查看任务是否完成。

如果它在您的代码仍然存在问题之前有效。

如果没有问题,还要查找数据库规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 2022-01-13
    • 2017-12-26
    • 1970-01-01
    • 2018-07-15
    • 2019-07-10
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多