首页 文章

Firebase登录并使用用户名注册

提问于
浏览
1

我目前正在使用AndroidHive的tutorial来学习如何使用Firebase,我现在开始很好地理解方法和文档 - 我意识到Firebase提供了一个使用电子邮件和密码的注册/登录方法,而且这条信息不是存储在我们的数据库中

我想实现一个系统,当他们注册时,他们提供他们的电子邮件,密码和用户名以及一些其他数据,并将它们全部保存到数据库中 . 这样用户就可以使用他们的电子邮件或用户名登录 . 我在堆栈上发现这篇文章显然是我要问的这个问题的answer - 但是,我不完全理解这个以及它如何与我的代码链接如下

auth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
    Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
    progressBar.setVisibility(View.GONE);

    if (!task.isSuccessful()) {
        Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
            Toast.LENGTH_SHORT).show();
    } else {
        startActivity(new Intent(SignupActivity.this, MainActivity.class));
        finish();
    }
}
});

非常感谢任何帮助

2 回答

  • 1

    试试这个:

    auth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
        progressBar.setVisibility(View.GONE);
        generateUser(email, password)
    
        if (!task.isSuccessful()) {
            Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
                Toast.LENGTH_SHORT).show();
        } else {
            startActivity(new Intent(SignupActivity.this, MainActivity.class));
            finish();
        }
    }
    });
    

    这是上面调用的方法 .

    public void generateUser(String username, String password)
    {
    
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference users = database.getReference("users"); //users is a node in your Firebase Database.
    User user = new User(username, password); //ObjectClass for Users
    users.push().setValue(user);
    
    }
    

    另外: User.class

    public class User {
    
        String username;
        String password;
    
        public User() {
        //Empty Constructor For Firebase
        }
    
    
    public User(String username, String password)
            {
            this.username = username; //Parameterized for Program-Inhouse objects.
            this.password = password;
            }
    
        //Getters and Setters
        public String getUsername()
        {
        return username;
        }
        public void setUsername(String username)
        {
        this.username = username;
        }
        public String getPassword()
        {
        return password;
        }
        public void setPassword(String password)
        {
        this.password = password;
        }
    }
    
  • 0

    首先撤消添加 .getDatabase(); . 这不是本机Firebase方法,我的错误 .

    我遇到了你的问题 .

    使FirebaseDatabase成为全局变量并在onCreate中初始化它 . 它需要一个背景 .

    在onCreate之前先拿 FirebaseDatabase database; .

    并且,在onCreate:初始化, database=FirebaseDatabase.getInstance(); .

    不要在方法中初始化 . 我很快就会编辑我以前的答案 .

相关问题