编辑:通过将setValue(newProfile)移动到createUserWithEmailAndPassword方法下方,可以解决此问题。
我正在尝试在同一活动中使用Firebase注册人员并将其信息存储到数据库中。注册它们没有问题。但是即使用户已注册,MainActivity仍会启动,然后会显示吐司消息;与这些命令使用相同方法的setValue()不会将信息写入数据库。这是写入数据库部分( setValue()参数newProfile被声明为HashMap <>()):
mAuth = FirebaseAuth.getInstance();
firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if(user != null){
databaseReference = FirebaseDatabase.getInstance().getReference().
child(selected_server).child(user_role).child(user.getUid());
databaseReference.setValue(newProfile);
Toast.makeText(Registration.this,"Registration completed!",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Registration.this,MainActivity.class);
startActivity(intent);
finish();
}
}
};
这是注册部分:
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String email = et_email.getText().toString();
final String password = et_password.getText().toString();
if(needed_role.equals("") || user_role.equals("") || selected_server.equals("") ) {
Toast.makeText(Registration.this,"Please complete all informations" , Toast.LENGTH_SHORT).show();
}
else{
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(Registration.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
newProfile.put("E-mail" , et_email.getText().toString());
newProfile.put("Password" , et_password.getText().toString());
newProfile.put("Server" , selected_server);
newProfile.put("Summoner Name",et_summoner_name.getText().toString());
newProfile.put("Role", user_role);
newProfile.put("Needed" , needed_role);
if(!task.isSuccessful()){
Toast.makeText(Registration.this,"Sign up error" + task.getException(),Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
答案 0 :(得分:0)
使用define-properties
在将价值投入使用之前,请确保您没有使用updateChildren
hashmap