【发布时间】:2019-01-25 21:34:33
【问题描述】:
我是 Firebase 的新手。每当我点击注册按钮时,我的应用程序就会崩溃。我只是尝试为该用户创建新的用户身份验证和电子邮件验证,最后将用户数据上传到 firebase。我成功地获得了身份验证和电子邮件验证,但没有上传我的数据。我检查了 logcat,它显示我在上传详细信息时出错。firebaseAuth.getUid() 返回 null 存在于 sendUserData() 函数中。 .如果它返回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 消息。它总是打印吐司消息,而不是将我的数据上传到firebase..我是新手...所以请发布我需要解释的内容..希望你能得到我的问题..谢谢
【问题讨论】:
标签: java android firebase firebase-realtime-database firebase-authentication