【问题标题】:I cannot add user to Firebase Authetnication using Android Studio Java我无法使用 Android Studio Java 将用户添加到 Firebase 身份验证
【发布时间】:2020-05-08 16:18:02
【问题描述】:

我查看了一些 Youtube 教程,阅读了一些主题并尝试掌握 Firebase 页面上的文档,但它似乎完全不适合我。我只是想添加手动编写的(在源代码中)用户来测试它,但这不起作用。尝试在两个“if”条件下编写“toast”消息,但似乎没有一个 toast 弹出。我可以通过他们的页面手动将用户添加到firebase,当我这样做并尝试添加同一个用户时,我想我已经有一次“用户创建”吐司,但是当我再次尝试时,我什么也没得到,所以我什至不知道。

编辑:对不起,如果我说错了,但我没有尝试添加到数据库,我想添加到身份验证,因为我得到了包含数据库的部分,但身份验证不起作用。

Edit2:要么是带有缓存/AVD 的东西,要么我不知道,但是在允许互联网(在清单上)之后,它似乎工作了。我不知道这是否有帮助,但我在答案下标记了添加该内容的评论作为解决方案。

我的代码是:

public class MainActivity extends AppCompatActivity
{
    FirebaseAuth mAuth;
    FirebaseDatabase database;
    DatabaseReference myRef;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);;
        mAuth = FirebaseAuth.getInstance();
        database = FirebaseDatabase.getInstance();
        Button buttonLogin;
        buttonLogin = findViewById(R.id.loginLoginButton);
        buttonLogin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mAuth.createUserWithEmailAndPassword("example@example.com", "exempliore852").addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>()
                {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task)
                    {
                        if (task.isSuccessful())
                        {
                            Toast.makeText(MainActivity.this, "User created", Toast.LENGTH_LONG).show();
                        }
                        else
                        {
                            Toast.makeText(MainActivity.this, "Not successful!", Toast.LENGTH_LONG).show();
                        }
                    }
                });

            }
        });
  }

我在 logcat 中不断收到此错误:

2020-05-08 19:13:41.036 1791-2322/? E/GnssHAL_GnssInterface: gnssSvStatusCb: a: input svInfo.flags is 8

完整的 logcat 错误(因为 Verbose logcat 对于 pastebin 来说太大了): https://pastebin.com/2icthFwN

我做错了什么?

编辑:对不起,如果我说错了,但我没有尝试添加到数据库,我想添加到身份验证,因为我得到了包含数据库的部分,但身份验证不起作用。

【问题讨论】:

    标签: java android firebase firebase-authentication


    【解决方案1】:

    如果您尝试使用电子邮件和密码创建用户并将用户存储在 Firebase 数据库中,您必须编写将用户存储在数据库中的方法。看看

     mAuth.createUserWithEmailAndPassword(edtEmail.getText().toString(), edtPassword.getText().toString())
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
    
                            if (task.isSuccessful()) {
    
                                Toast.makeText(SignUpActivity.this, "Signing up successful.",
                                        Toast.LENGTH_SHORT).show();
    
                                // method to get username stored in database
                                FirebaseDatabase.getInstance().getReference()
                                        .child("users").child(task.getResult().getUser().getUid())
                                        .child("username")
                                        .setValue(edtUsername.getText().toString());
    
                                UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
                                        .setDisplayName(edtUsername.getText().toString())
                                        .build();
    
                                FirebaseAuth.getInstance().getCurrentUser().updateProfile(profileUpdates)
                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
    
                                                if (task.isSuccessful()) {
    
                                                    Toast.makeText(SignUpActivity.this, "User " +
                                                            edtUsername.getText().toString() + " updated",
                                                            Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                        });
    
                                transitionToMainActivity();
                            } else {
    
                                Toast.makeText(SignUpActivity.this, "Signing up failed.",
                                        Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
    

    【讨论】:

    • 我会检查一下,但要明确一点:我想将用户添加到身份验证页面(以便您可以登录),而不是实时数据库。对不起,如果我之前说错了。问题是,它没有向身份验证添加任何内容,并且没有显示任何“Toast”消息。
    • 试试这个,我很确定它会起作用...如果您不想将用户添加到数据库,那么只需删除将用户名存储在数据库中的方法。如果你有互联网权限,还要检查 AndroidManifest.xml 类
    • 这真的很奇怪。我还没有尝试过您的代码,但首先添加了互联网权限来显示,似乎仍然无法正常工作,所以只是尝试注释掉代码块以离开身份验证部分。似乎仍然无法正常工作,但花了一些时间并开始创建用户。取消注释代码的另一部分,一切正常,所以......也许互联网许可实际上是问题。奇怪的是我没有在教程或文档中看到它;也许我忽略了。无论如何,非常感谢!
    【解决方案2】:

    您的代码根本没有向实时数据库添加任何内容。它只是创建一个具有 Firebase 身份验证的用户帐户,这是一个不同的产品。您可以在 Firebase 控制台的“身份验证”产品区域中查看用户帐户。

    如果您想将用户数据添加到数据库中,您需要自己编写。

    【讨论】:

    • 不,就是这样,它没有向身份验证添加任何内容。这就是我想要做的,因为我完成了数据库的工作并且工作正常,但身份验证部分不起作用。还是我必须首先在数据库中有一个具有“电子邮件”和“密码”详细信息的用户才能将他添加到身份验证中?
    • 不,如果 createUserWithEmailAndPassword 尚不存在,则应添加一个新帐户。
    • 我就是这么想的。我确实也将依赖项添加到了firebase身份验证中,如果出现问题,至少应该显示“不”,对吧?我可能会尝试创建一个新项目来测试这个添加用户的东西,也许还有其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2021-06-11
    • 1970-01-01
    • 2020-01-27
    • 2017-12-27
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多