【问题标题】:How to change document in Firestore without String error?如何在没有字符串错误的情况下更改 Firestore 中的文档?
【发布时间】: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


【解决方案1】:

您收到以下错误:

我得到“moveFirestoreDocument 不能应用于(字符串,字符串)

因为您试图将两个 String 类型的参数和 not 类型的 DocumentReference 传递给 moveFirestoreDocument() 方法。为了能够移动文档,fromPathtoPath 都必须是 DocumentReference 类型,因此您可以在 toPathget() 上调用 set() 和在 fromPath 上调用 delete()

我可以更改 moveFirestoreDocument 方法,使其也可以使用字符串吗?

无需更改方法,只需在调用时传递正确的参数即可。根据您在问题中提供的详细信息,我了解到您的架构类似于:

Firestore-root
   |
   --- users (collection)
         |
         --- John (document)
              |
              --- //User details

要重命名文档,请使用以下方法调用:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
DocumentReference oldUsernameRef = usersRef.document(oldUsername);
DocumentReference usernameInputRef = usersRef.document(usernameInput);
moveFirestoreDocument(oldUsernameRef, usernameInputRef);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2020-11-05
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多