当我尝试编辑一个字段时,另一个字段在Firestore Database Android中设置为NULL



用户登录后,他的帐户详细信息会显示在应用程序中,但他们可以编辑这些字段。他们可以更改用户名、显示名称和电话号码。我试图更改显示名称(更新用户名是另一种方法(,但当我这样做时,电话号码被设置为null,反之亦然。我的代码有问题吗?我是Firestore数据库的初学者。

private FirebaseFirestore dbFirebaseFirestore.getInstance();
private DocumentReference userRef;
userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
public void updateUserAccountSettings(String displayName, String phoneNumber) {
Log.d(TAG, "updateUserAccountSettings: updating user account settings.");

userRef = db.collection("Users")
.document(userID);
userRef.update("display_name", displayName
).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "onComplete: update is succesful");
} else {
Log.d(TAG, "onComplete: update failed ");
}
}
});
userRef.update("phone_number", phoneNumber
).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "onComplete: update is succesful");
} else {
Log.d(TAG, "onComplete: update failed ");
}
}
});
/**
* change the rest of the settings that do not require uniqueness
*/
if(!mUser.getDisplay_name().equals(displayName)){
//update displayname
mFirebaseMethods.updateUserAccountSettings(displayName, null);
}
if(mUser.getPhone_number().equals(phoneNumber)){
//update phoneNumber
mFirebaseMethods.updateUserAccountSettings(null, phoneNumber);
}

这就是我调用该方法的地方,我想告诉大家,因为当我验证display_name是否已更改时,我会将电话号码设置为null,反之亦然,但在此之前,实时数据库可以正常工作。

当您调用updateUserAccountSettings方法时,两个userRef.update("display_name",displayName…(并且正在运行userRef.update("phone_number",phoneNumber…(。在if条件中,其中一个值为null。由于这两个函数都在运行,所以您将始终有一个值为null。一种方法是设置If Else条件来检查值是否为空,

if(displayName != null){
userRef.update("display_name", displayName
).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "onComplete: update is succesful");
} else {
Log.d(TAG, "onComplete: update failed ");
}
}
});
}
else{
userRef.update("phone_number", phoneNumber
).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "onComplete: update is succesful");
} else {
Log.d(TAG, "onComplete: update failed ");
}
}
});
}

第二种方法是使用单独的函数来更新值,并从if条件中调用相应的函数

if(!mUser.getDisplay_name().equals(displayName)){
//update displayname
mFirebaseMethods.updateUserDisplayName(displayName, null);
}
if(mUser.getPhone_number().equals(phoneNumber)){
//update phoneNumber
mFirebaseMethods.updatePhoneNumber(null, phoneNumber);
}

相关内容

最新更新