【问题标题】:Can't write in Firebase Realtime Database from Android无法从 Android 写入 Firebase 实时数据库
【发布时间】:2021-04-14 17:31:42
【问题描述】:

我正在尝试使用 Firebase 制作一个简单的 Android 应用。

目前我只是想从 F​​irebase 中实时保存用户数据库。但由于某种原因,它不起作用。另一方面,身份验证工作完美。

数据库本身不显示任何内容。它总是显示“null”

我一直在关注这个 YouTube 教程,并且制作的东西非常相似。

当我尝试创建一个用户并将其发送到数据库时,运行程序没有给出答案。一旦 setValue(user) 完成,我就有一个不可见的进度条。而progressBar 永远不会消失。只是呆在那里旋转。

活动

private ProgressBar progressBar;
FirebaseAuth auth = FirebaseAuth.getInstance();

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("users");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    progressBar = findViewById(R.id.progressBar);
    progressBar.setVisibility(View.INVISIBLE);

    registerButton = findViewById(R.id.registerButton);
    registerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            registerUser();
        }
    });
}

private void registerUser() {
    String name = nameTV.getText().toString().trim();
    String email = emailTV.getText().toString().trim();
    String pwd = pwdTV.getText().toString().trim();
    String confirmPwd = confirmPwdTV.getText().toString().trim();

    progressBar.setVisibility(View.VISIBLE);

    auth.createUserWithEmailAndPassword(email, pwd)
            .addOnCompleteListener(ActivityRegister.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        User user = new User(email, name, pwd);

                        myRef.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    Toast.makeText(ActivityRegister.this, "User has been registered successfully", Toast.LENGTH_LONG).show();
                                    progressBar.setVisibility(View.GONE);

                                    startActivity(new Intent(ActivityRegister.this, ActivityLogin.class));
                                } else {
                                    Toast.makeText(ActivityRegister.this, "Failed to register. Try again", Toast.LENGTH_LONG).show();
                                    progressBar.setVisibility(View.GONE);
                                }
                            }
                        });
                    } else {
                        Toast.makeText(ActivityRegister.this, "Failed to register. Try again", Toast.LENGTH_LONG).show();
                        progressBar.setVisibility(View.GONE);
                    }
                }
            });

}

依赖关系

implementation platform('com.google.firebase:firebase-bom:26.2.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-database:19.6.0'

【问题讨论】:

  • 请仅使用android-studio 标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android 标签。这也将自动启用 Java 和 Kotlin 的语法高亮显示。
  • 你从来没有说过你检查过firebase数据库,所以我需要问一下。你是否?你在用户名下有什么写的吗?
  • 你收到 Toast 消息了吗?
  • 没有。进度条一直在那里永远旋转。没有吐司

标签: android firebase firebase-realtime-database


【解决方案1】:

一段时间后,我终于设法解决了这个问题。

基本上我必须从 firebase 页面下载 google-services.json 并替换为我项目中的 json。

我第一次配置 firebase 时一定是做错了什么。

【讨论】:

    【解决方案2】:

    可以添加进度条的代码吗?

    此外,您还应该将 OnCompleteListener 添加到 setValue...此调用是一个 Task,因此如果您想确保它成功,您还应该为其附加一个 Listener。

    【讨论】:

    • 刚刚编辑了原来的帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多