gpt4 book ai didi

java - 我的应用程序因 firebaseAuth.getUid() 的空指针异常而崩溃

转载 作者:行者123 更新时间:2023-12-02 10:54:10 24 4
gpt4 key购买 nike

我是 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 类中创建的构造函数。我还尝试使用 if 条件匹配 firebaseAuth.getUid()==null ,其他部分与 Toast 消息一起尝试。总是打印 toast 消息,而不是将我的数据上传到 firebase..我对此很陌生...所以请发布我需要的内容并进行解释..希望你能明白我的问题..谢谢

最佳答案

您在 sendEmail() 有机会完全完成之前调用 firebaseAuth.signOut()。换句话说,UID 为 null,因为您在调用 firebaseAuth.getUid() 之前注销了用户。您可能根本不想自动注销它们 - 这通常仅在用户选择这样做时才会发生。

关于java - 我的应用程序因 firebaseAuth.getUid() 的空指针异常而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51919150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com