我有一個用戶模型,其中包含一些我嘗試更新的欄位。但是,當我編輯用戶的密碼或電子郵件時,我在 firebase 存盤中的用戶模型保持不變,而 firebase auth 會正確更新。
這是我的更新用戶方法
private void updateUser() {
String mFullName = editFullName.getText().toString().trim();
String mEmail = editEmail.getText().toString().trim();
String mPhone = editPhone.getText().toString().trim();
String mPassword = editPassword.getText().toString().trim();
if(isFullNameChanged(mFullName)){
user.setFullName(mFullName);
}
if(isPhoneChanged(mPhone)){
user.setPhone(mPhone);
}
if(isEmailChanged(mEmail)){
currentUser.updateEmail(mEmail)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
System.out.println("Email successful " mEmail);
user.setEmail(mEmail);
System.out.println("Email successful " mEmail " " user.getEmail());
}
else{
Toast.makeText(editProfile.this, "Email update error, re-authentication required", Toast.LENGTH_SHORT).show();
}
}
});
}
if(isPasswordChanged(mPassword)){
currentUser.updatePassword(mPassword)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
System.out.println("Password successful");
user.setPassword(mPassword);
}
else{
Toast.makeText(editProfile.this, "Password update error, re-authentication required", Toast.LENGTH_SHORT).show();
}
}
});
}
userReference.child(currentUser.getUid()).setValue(user);
System.out.println("My current email: " currentUser.getEmail() " " user.getEmail());
Toast.makeText(editProfile.this, "Profile update successful", Toast.LENGTH_SHORT).show();
}
用戶模型
public class User {
String fullName, password, email, date, phone, imageUri;
public User(){
}
public User(String mFullName, String mEmail, String mPassword, String mPhone, String mDate, String mImageUri){
this.fullName = mFullName;
this.email = mEmail;
this.password = mPassword;
this.phone = mPhone;
this.date = mDate;
this.imageUri = mImageUri;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getImageUri() {
return imageUri;
}
public void setImageUri(String imageUri) {
this.imageUri = imageUri;
}
}
我不知道為什么,但是在 completeListener 函式中,我的用戶更改了該欄位,但是當我退出該欄位時,用戶根本沒有任何更改。我試圖弄清楚但沒有找到任何東西
uj5u.com熱心網友回復:
這是因為在 Auth 中更新時,您沒有更新模型中的電子郵件和密碼。試試這個代碼:
private void updateUser() {
String mFullName = editFullName.getText().toString().trim();
String mEmail = editEmail.getText().toString().trim();
String mPhone = editPhone.getText().toString().trim();
String mPassword = editPassword.getText().toString().trim();
if(isFullNameChanged(mFullName)){
user.setFullName(mFullName);
}
if(isPhoneChanged(mPhone)){
user.setPhone(mPhone);
}
if(isEmailChanged(mEmail)){
user.setEmail(mEmail);
currentUser.updateEmail(mEmail)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
System.out.println("Email successful " mEmail);
user.setEmail(mEmail);
System.out.println("Email successful " mEmail " " user.getEmail());
}
else{
Toast.makeText(editProfile.this, "Email update error, re-authentication required", Toast.LENGTH_SHORT).show();
}
}
});
}
if(isPasswordChanged(mPassword)){
user.setPassword(mPassword);
currentUser.updatePassword(mPassword)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
System.out.println("Password successful");
user.setEmail(mPassword);
}
else{
Toast.makeText(editProfile.this, "Password update error, re-authentication required", Toast.LENGTH_SHORT).show();
}
}
});
}
userReference.child(currentUser.getUid()).setValue(user);
System.out.println("My current email: " currentUser.getEmail() " " user.getEmail());
Toast.makeText(editProfile.this, "Profile update successful", Toast.LENGTH_SHORT).show();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455031.html
