以下是我要在firebase数据库上传的数据
{email=t@t.com, name=david ,photoUrl=https://i.stack.imgur.com/tHOLT.png}
在注册屏幕中,我按照以下步骤注册用户:
mAuth.createUserWithEmailAndPassword(binding.inputEmail.getText().toString(),binding.inputPwd.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
mAuth.signInWithEmailAndPassword(binding.inputEmail.getText().toString(),binding.inputPwd.getText().toString())
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
storeuserdata();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hideProgressDialog();
Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hideProgressDialog();
Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
public void storeuserdata(){
mUserRefrence.child(uid).setValue(postValues)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
hideProgressDialog();
Toast.makeText(SignUpActivity.this, getString(R.string.login_success), Toast.LENGTH_SHORT).show();
finish();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
hideProgressDialog();
Toast.makeText(SignUpActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
但是当我查看数据库时,它总是会跳过photourl
个值和name
键值。
users{
Ul95OXiNhCM5ydpbdvWC5sfnykz2
email: "t@t.com"
photoUrl: ""}
如果您观察到上述结果,则会丢失具有值的name
键,并且还会丢失photoUrl
值。
以下是后评估数据
D/SignUpActivity: storeUserData() called postValues : {email=t@t.com, name=david, photoUrl=https://i.stack.imgur.com/tHOLT.png}
以下是模型类
class UserData {
private String name;
private String email;
private String photoUrl;
public UserData() {
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setPhotoUrl(String photoUrl) {
this.photoUrl = photoUrl;
}
public UserData(String name, String email, Uri photoUrl) {
this.name = name;
this.email = email;
this.photoUrl=photoUrl.toString();
}
@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();
result.put("name", name);
result.put("email", email);
result.put("photoUrl",photoUrl);
return result;
}
}
答案 0 :(得分:0)
尝试addOnCompleteListener而不是addOnSuccessListener,
mUserRefrence.child(uid).setValue(postValues)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Void aVoid) {
hideProgressDialog();
Toast.makeText(SignUpActivity.this, getString(R.string.login_success), Toast.LENGTH_SHORT).show();
finish();
}
})
});
如果这有助于您,请告诉我。
答案 1 :(得分:0)
您正在使用createUserWithEmailAndPassword
创建新用户,这是正确无问题但不需要signInWithEmailAndPassword
,因为当您createUserWithEmailAndPassword
这意味着您不需要再次验证用户已在您的应用中登录的用户更好地将AuthStateListener
添加到FirebaseAuth
,而不是在onComplete
方法中保存数据。
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
storeuserdata();
}
}