Случайный документ, который не существует в firestore, выбирается на android и удаляется - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь удалить документ из Firestore. Я пытаюсь сделать это на основе идентификатора задачи, который был случайно сгенерирован Firestone. когда на android выбрана конкретная задача, я хочу иметь возможность удалить эту задачу. Однако, когда я попытался отладить код, он показывает случайный идентификатор, который не существует в базе данных, и пытается удалить его, отправляя мне сообщение об успешном завершении работы в консоли. Я не уверен, где я иду не так. Пожалуйста, совет.

 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");
        }
    });
}

вышеупомянутый метод удаления вызывается для кнопки с помощью android: OnClick

Задача, которую я хочу удалить, обведена кружком

1 Ответ

0 голосов
/ 01 мая 2020

Когда вы используете следующую строку кода:

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(/* ... */);

Вы пытаетесь удалить документ, который не существует, и это потому, что вы не создали его в первую очередь. Если вам нужно удалить указанный c документ, вам нужно знать его идентификатор. Таким образом, следующие строчки кода помогут:

 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");
        }
    });
}

Чтобы удалить этот документ, я использовал точно такой же идентификатор, который существует в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...