繁体   English   中英

由于firebaseAuth.getUid()的Null指针异常,我的应用程序崩溃

[英]My app get crashes because of Null pointer exception for firebaseAuth.getUid()

我是Firebase的新手。 每当我单击“注册”按钮时,我的应用就会崩溃。 我只是尝试为该用户创建新的用户身份验证和电子邮件验证,最后将用户数据上传到Firebase。 我成功得到认证和电子邮件验证,但不能上传我的数据。我检查logcat的,它显示我在上传信息出现错误.. firebaseAuth.getUid()返回null出现在sendUserData()function..what做的,如果它返回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 ..我是新手...所以,请在解释中发布我需要的内容。.希望您能回答我的问题..谢谢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM