【发布时间】:2020-02-12 06:06:28
【问题描述】:
在我的应用程序中,第一次用户创建了一个用户名,我将其作为文档保存在 Firestore 中并将其设置为 displayName(用户名 = 文档名称 = displayName)。在应用程序中,用户可以选择通过在EditText 中键入新用户名来更改他的用户名。结果应该是存储在他当前用户名下的数据移动到具有新用户名的新文档。因此,首先我检查新用户名是否已被其他人使用,如果没有,我创建一个新文档,名称为新用户名。现在,我将当前 displayName(即当前用户名)作为字符串获取,并将 EditText 的输入作为字符串(新用户名)获取。我实现了一种从这里移动文档的方法:How to move a document in Cloud Firestore?
但是当我调用这样的方法moveFirestoreDocument(usernameInput, oldUsername ); 我得到:
moveFirestoreDocument 不能应用于 (String, String)
我该如何解决这个问题?我可以更改 moveFirestoreDocument 方法,使其也可以使用字符串吗?
方法如下:
public void moveFirestoreDocument(DocumentReference fromPath, final DocumentReference toPath) {
fromPath.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
toPath.set(document.getData())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
fromPath.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully deleted!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error deleting document", e);
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
}
【问题讨论】:
-
你为什么不直接传递它声明的文档引用?
-
你这是什么意思?我是 Firestore 的新手,所以我不知道该怎么做
标签: java android firebase google-cloud-firestore