firebase 在firestore中不存在的随机文档在android上被选中并被删除

aiqt4smr  于 2023-08-07  发布在  Android
关注(0)|答案(1)|浏览(113)

我正在尝试从Firestore中删除文档。我尝试根据凡士通随机生成的任务ID来执行此操作。当一个特定的任务在Android上被选中时,我希望能够删除该任务。然而,当我尝试调试代码时,它显示了一个数据库中不存在的随机ID,并试图删除该ID,并在控制台中向我发送了一条成功消息。我不知道我错在哪里。请咨询。

public void deleteTasks(View v) {
    userId = mFirebaseAuth.getCurrentUser().getUid();
    String tskid= fStore.collection("usersData").document(userId).collection("tasks").document().getId();
    DocumentReference taskref = fStore.collection("usersData").document(userId).collection("tasks").document(tskid);
    taskref.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Log.d("tag", "Task Deleted Successfully");
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d("tag", "Task Deletion Unsuccessful");
        }
    });
}

字符串
上面的delete方法是使用android:OnClick在按钮上调用的
The Task I'd like to delete is Circled

9q78igpj

9q78igpj1#

当您使用以下代码行时:

String tskid= fStore.collection("usersData").document(userId)
    .collection("tasks").document()
    .getId();

字符串
您正在生成一个新的随机ID。实际上,你是在为将来要写的文档保留一个密钥。使用此线路时:

DocumentReference taskref = fStore.collection("usersData").document(userId)
    .collection("tasks").document(tskid);


您正在创建对该位置的引用。但是,使用此行时:

taskref.delete().addOnCompleteListener(/* ... */);


您正在尝试删除一个不存在的文档,这是因为您没有首先创建它。如果需要删除特定文档,则需要知道ID。因此,下面的代码行将完成这个任务:

public void deleteTasks(View v) {
    userId = mFirebaseAuth.getCurrentUser().getUid();
    String tskid = "CQ45RKh8Ohd6DXjSQ8RO";
    DocumentReference taskref = fStore.collection("usersData").document(userId)
            .collection("tasks").document(tskid);
    taskref.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Log.d("tag", "Task Deleted Successfully");
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.d("tag", "Task Deletion Unsuccessful");
        }
    });
}


为了删除该文档,我使用了数据库中存在的完全相同的ID。

相关问题