Android Firebase身份验证和数据库
我想使用firebase身份验证,获取Uid并将其与firebase数据库中有关用户的其他信息一起存储 我有SignUpActivity和LoginActivity,我使用firebase身份验证(电子邮件,pwd)来注册和登录我的应用程序,这很好,但当我添加更多关于用户的信息,如firstName、lastName、phoneNumber时,我在authUser上出现了一个错误“NullpointerException” 注册活动,按钮注册:Android Firebase身份验证和数据库,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我想使用firebase身份验证,获取Uid并将其与firebase数据库中有关用户的其他信息一起存储 我有SignUpActivity和LoginActivity,我使用firebase身份验证(电子邮件,pwd)来注册和登录我的应用程序,这很好,但当我添加更多关于用户的信息,如firstName、lastName、phoneNumber时,我在authUser上出现了一个错误“NullpointerException” 注册活动,按钮注册: btnSignUp.setOnClickList
btnSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String nom =inputNom.getText().toString().trim();
final String prenom=inputPrenom.getText().toString().trim();
final String numTel= inputNumTel.getText().toString().trim();
String email = inputEmail.getText().toString().trim();
String password = inputPassword.getText().toString().trim();
//create user
authUser.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()) {
createUser(nom,prenom,numTel);
Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
Toast.LENGTH_SHORT).show();
} else {
startActivity(new Intent(SignupActivity.this, LoginActivity.class));
finish();
}
}
});
}
});
private void createUser(String nom, String prenom,String numTel) {
//Get Firebase auth instance
authUser = FirebaseAuth.getInstance();
user = authUser.getCurrentUser();
if (user != null) {
id=user.getUid();
}
userInfos = new User(nom, prenom, numTel);
myRef.child(id).setValue(userInfos);
}
btnSignUp.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最后一个字符串nom=inputNom.getText().toString().trim();
最终字符串prenom=inputPrenom.getText().toString().trim();
最后一个字符串numTel=inputNumTel.getText().toString().trim();
字符串email=inputEmail.getText().toString().trim();
字符串密码=inputPassword.getText().toString().trim();
//创建用户
authUser.createUserWithEmailAndPassword(电子邮件,密码)
.addOnCompleteListener(SignupActivity.this,new OnCompleteListener尝试在createUser方法中为Firebase实例使用不同的名称,我建议在该方法中声明一个局部变量
其次,如果用户注册成功,则下面的if语句将始终计算为“false”,如果注册失败,则下面的if语句将始终计算为true,因此请删除“!”:
if (!task.isSuccessful())
{
createUser(nom,prenom,numTel);
Toast.makeText(SignupActivity.this, "Authentication failed." +
task.getException(),
Toast.LENGTH_SHORT).show();
}
发布你的错误日志,可以帮助你更好地理解错误。希望这对你有所帮助
-------下面的代码段,根据需要进行修改-------
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.text.TextUtils;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
公共类注册活动扩展了AppCompatActivity{
私有FirebaseAuth fbAuth;
私有EditText用户名字段;
私有文本密码字段;
私有编辑文本字段;
私有按钮注册按钮;
私有进程对话;
私有数据库参考数据库参考;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
//初始化所有变量/对象
fbAuth=FirebaseAuth.getInstance();
progressDialog=新建progressDialog(此);
databaseReference=FirebaseDatabase.getInstance().getReference().child(“用户”);
userNameField=(EditText)findViewById(R.id.nameField);
passwordField=(EditText)findViewById(R.id.passwordField);
emailField=(EditText)findViewById(R.id.emailField);
registrationButton=(按钮)findViewById(R.id.registerButton);
registrationButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startUserRegistration();
}
});
}
私有void startUserRegistration(){
//初始化所有变量/对象
FirebaseAuth fbAuth=FirebaseAuth.getInstance();
最终字符串名=userNameField.getText().toString().trim();
字符串email=emailField.getText().toString().trim();
字符串密码=passwordField.getText().toString().trim();
如果(!TextUtils.isEmpty(名称)和&!TextUtils.isEmpty(电子邮件)和&!TextUtils.isEmpty(密码))
{
fbAuth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(新OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful())
{
//您的逻辑如下,初始化用户对象
user=authUser.getCurrentUser();
如果(用户!=null){
字符串userid=fbAuth.getCurrentUser().getUid();
userInfos=新用户(nom、prenom、numTel);
myRef.child(id).setValue(userInfos);
}
}
}
});
}
}
}
我照你说的做了,但我仍然有同样的错误,我只是在上面添加了logcat。第121行是什么?有:authUser.createUserWithEmailAndPassword(email,password)这意味着您没有正确初始化authUser对象,或者它在第121行超出了范围。我将在前面编辑我的答案,并发布一些代码,您可以使用这些代码来实现基本用户注册。让我知道这很有帮助。是的,我确实认为CreateUser()中存在问题,但实际上我必须在onCreate()中获取Firebase auth实例.
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class RegisterActivity extends AppCompatActivity {
private FirebaseAuth fbAuth;
private EditText userNameField;
private EditText passwordField;
private EditText emailField;
private Button registrationButton;
private ProgressDialog progressDialog;
private DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
//initialize all variables/objects
fbAuth = FirebaseAuth.getInstance();
progressDialog = new ProgressDialog(this);
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users");
userNameField = (EditText)findViewById(R.id.nameField);
passwordField = (EditText)findViewById(R.id.passwordField);
emailField = (EditText)findViewById(R.id.emailField);
registrationButton = (Button)findViewById(R.id.registerButton);
registrationButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
startUserRegistration();
}
});
}
private void startUserRegistration() {
//initialize all variables/objects
FirebaseAuth fbAuth = FirebaseAuth.getInstance();
final String name = userNameField.getText().toString().trim();
String email = emailField.getText().toString().trim();
String password = passwordField.getText().toString().trim();
if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password))
{
fbAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
//your logic is below, initialize the user object
user = authUser.getCurrentUser();
if (user != null) {
String userid = fbAuth.getCurrentUser().getUid();
userInfos = new User(nom, prenom, numTel);
myRef.child(id).setValue(userInfos);
}
}
}
});
}
}
}