我是Firebase的新手。每当我单击“注册”按钮时,我的应用就会崩溃。我只是尝试为该用户创建新的用户身份验证和电子邮件验证,最后将用户数据上传到Firebase。我成功获得身份验证和电子邮件验证,但未上传数据。.我检查了logcat,它显示我在上传详细信息时出错。. firebaseAuth.getUid()返回sendUserData()函数中存在的null。 。如果返回null或如何停止返回null怎么办。帮我将此数据更新到Firebase。我不知道该怎么解决..请帮帮我..检查最后一个函数sendUserData()
public class RegisterActivity extends AppCompatActivity {
private EditText name,password,email,age;
private Button sign_up;
private TextView login;
private FirebaseAuth firebaseAuth;
private ProgressDialog progressDialog;
private ImageView profilePic;
public String Username,UserPass,UserAge,UserEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
setUp();
firebaseAuth=FirebaseAuth.getInstance();
progressDialog=new ProgressDialog(this);
sign_up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progressDialog.setMessage("Signing up");
progressDialog.show();
if(validate()){
String user_email=email.getText().toString().trim();
String user_name=name.getText().toString().trim();
String user_password=password.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(user_email,user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()) {
progressDialog.dismiss();
sendEmail();
firebaseAuth.signOut();
}
else{
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this,"Registration failed",Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(RegisterActivity.this,MainActivity.class));
}
});
}
private void setUp(){
name=(EditText)findViewById(R.id.etName);
password=(EditText)findViewById(R.id.etPassword);
email =(EditText)findViewById(R.id.etEmail);
sign_up=(Button)findViewById(R.id.btSignUp);
login=(TextView)findViewById(R.id.tvlogin);
age=(EditText)findViewById(R.id.etAge);
profilePic=(ImageView)findViewById(R.id.ivProfile);
}
private Boolean validate(){
Boolean result=false;
Username=name.getText().toString();
UserPass=password.getText().toString();
UserEmail=email.getText().toString();
UserAge=age.getText().toString();
if(Username.isEmpty() || UserPass.isEmpty() || UserEmail.isEmpty() || UserAge.isEmpty()){
Toast.makeText(this,"Please enter all details",Toast.LENGTH_SHORT).show();
}
else{
result=true;
}
return result;
}
private void sendEmail(){
FirebaseUser firebaseUser=firebaseAuth.getCurrentUser();
if(firebaseUser!=null){
firebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
sendUserData();
Toast.makeText(RegisterActivity.this,"Email sent",Toast.LENGTH_LONG).show();
firebaseAuth.signOut();
finish();
}
else{
Toast.makeText(RegisterActivity.this,"Email not sent, Try again later",Toast.LENGTH_SHORT).show();
}
}
});
}
}
private void sendUserData(){
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid());
UserProfile userProfile = new UserProfile(UserAge, UserEmail, Username);
databaseReference.setValue(userProfile);
}
}
我创建了一个UserProfile类,并将这3个参数传递给了我在UserProfile类中创建的构造函数。此外,如果条件与firebaseAuth.getUid()== null匹配,并且还与Toast消息一起匹配,我也尝试了它。总是打印吐司消息,而不是将我的数据上传到Firebase。.我是新来的...所以请发表我需要的解释。.希望您能回答我的问题..谢谢
答案 0 :(得分:1)
您在firebaseAuth.signOut()
有机会完全完成之前致电sendEmail()
。换句话说,UID为空,因为您在调用firebaseAuth.getUid()
之前注销了用户。您可能根本不想自动注销它们-通常仅在用户选择这样做时才会发生。