Firebase登录并使用用户名注册

时间:2016-07-17 16:14:46

标签: android firebase firebase-authentication

我目前正在使用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 个答案:

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

答案 1 :(得分:0)

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

我遇到了你的问题。

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

在onCreate之前点击FirebaseDatabase database;

And in,onCreate:initialise,database=FirebaseDatabase.getInstance();

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