我正在制作一个APP,您必须登录才能继续 - 如果您没有注册用户,则可以创建一个新帐户。但是,当我创建一个新用户(并且它成功)时,我有一些关于我想要存储的用户的其他数据,用户UID作为唯一节点。
我的问题是,当我这样做时,用户auth UID与保存在DB中的用户不同。请参阅下面的代码:
private EditText editTextEmail, editTextPassword, editTextName, editTextAge;
private Button btnSignup;
private FirebaseAuth firebaseAuth;
private DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
firebaseAuth = FirebaseAuth.getInstance();
btnSignup = findViewById(R.id.btn_signUp2);
editTextEmail = findViewById(R.id.editText_emailSignup);
editTextPassword = findViewById(R.id.editText_passwordSignup);
editTextName = findViewById(R.id.editText_nameSignup);
editTextAge = findViewById(R.id.editText_ageSignup);
btnSignup.setOnClickListener(this);
}
public void signUp(){
final String email = editTextEmail.getText().toString().trim();
final String password = editTextPassword.getText().toString().trim();
String name = editTextName.getText().toString().trim();
String age = editTextAge.getText().toString().trim();
if(TextUtils.isEmpty(email)){
Toast.makeText(this, "Please enter an email", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(password)){
Toast.makeText(this,"Please enter a password", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(name)){
Toast.makeText(this,"Please enter your name", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(age)){
Toast.makeText(this,"Please enter your age", Toast.LENGTH_LONG).show();
return;
}
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
firebaseAuth.signInWithEmailAndPassword(email, password);
Toast.makeText(getApplicationContext(), "Register completed successfully", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "Error, please try again", Toast.LENGTH_SHORT).show();
return;
}
}
});
FirebaseUser fbUser = firebaseAuth.getCurrentUser();
User user = new User(email, password, name, Integer.parseInt(age));
databaseReference = FirebaseDatabase.getInstance().getReference("users");
databaseReference.child(fbUser.getUid().trim()).setValue(user);
finish();
startActivity(new Intent(this, LoginActivity.class));
}
@Override
public void onClick(View view) {
if (view == btnSignup){
signUp();
}
}
正如你所看到的那样,Uid不匹配。我究竟做错了什么?
我读到Firebase在创建用户时实际上并没有登录用户,所以如果创建成功,我尝试登录用户。它没有改变任何东西。
发布于 2019-06-11 13:50:40
首先评论一下:
signInWithEmailAndPassword
的onComplete
处理程序。onComplete
(甚至更好onSuccess
)处理程序中。所以类似于:
firebaseAuth
.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(getApplicationContext(), "Register completed successfully", Toast.LENGTH_SHORT).show();
FirebaseUser fbUser = firebaseAuth.getCurrentUser();
User user = new User(email, password, name, Integer.parseInt(age));
databaseReference = FirebaseDatabase.getInstance().getReference("users");
databaseReference.child(fbUser.getUid()).setValue(user);
}else{
Toast.makeText(getApplicationContext(), "Error, please try again", Toast.LENGTH_SHORT).show();
return;
}
}
});
发布于 2019-06-11 14:30:02
我解决了这个问题。我把它写成了我的第一个参数oncompletelistener
。
https://stackoverflow.com/questions/-100006983
复制相似问题