Android Firebase身份验证和数据库

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

我想使用firebase身份验证,获取Uid并将其与firebase数据库中有关用户的其他信息一起存储

我有SignUpActivity和LoginActivity,我使用firebase身份验证(电子邮件,pwd)来注册和登录我的应用程序,这很好,但当我添加更多关于用户的信息,如firstName、lastName、phoneNumber时,我在authUser上出现了一个错误“NullpointerException”

注册活动,按钮注册:

 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);

            }

                    }
                }
            });
        }
    }
}