Как удалить два документа в облачной базе данных Firebase? - PullRequest
1 голос
/ 06 августа 2020

Я написал следующий код, который удаляет два документа из облачной базы данных Firebase:

fireDB.document(groupPath).collection("users").document(phoneNumber).delete().addOnSuccessListener(new OnSuccessListener<Void>() {

            @Override
            public void onSuccess(Void aVoid) {
                fireDB.collection("users").document(phoneNumber).delete().addOnSuccessListener(new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(this.getClass().getName(), "DocumentSnapshot successfully deleted");
                        Toast.makeText(getApplicationContext(),R.string.successfully_deleted_user,Toast.LENGTH_LONG).show();
                        finish();
                    }
                }).addOnFailureListener(new OnFailureListener() {

                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(this.getClass().getName(), "Error deleting document", e);
                        Toast.makeText(getApplicationContext(),R.string.failed_to_delete_user,Toast.LENGTH_LONG).show();
                    }
                });
                Log.d(this.getClass().getName(), "DocumentSnapshot successfully deleted");
            }
        }).addOnFailureListener(new OnFailureListener() {

            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(this.getClass().getName(), "Error deleting document", e);
                Toast.makeText(getApplicationContext(),R.string.failed_to_delete_user,Toast.LENGTH_SHORT).show();
            }
        });

Проблема с этим кодом в том, что он удаляет первый документ, а затем удаляет второй документ, то есть если первая попытка будет Удалите его успешно, а второй не удастся удалить, возникнет проблема. Можно ли удалить два документа в облачной базе данных Firebase, чтобы результат мог быть одним из следующих двух:

  1. Оба документа удалены.
  2. Оба документа удалены. не удаляется.

Можно ли сделать?

1 Ответ

1 голос
/ 06 августа 2020

Как прокомментировал Робсиемб, вы захотите использовать для этого пакетную запись или транзакцию .

Насколько я понимаю, эквивалент из вашего кода будет примерно таким :

// Get a new write batch
WriteBatch batch = db.batch();

DocumentReference docRef1 = fireDB.document(groupPath).collection("users").document(phoneNumber);
DocumentReference docRef2 = fireDB.collection("users").document(phoneNumber)
DocumentReference laRef = db.collection("cities").document("LA");
batch.delete(docRef1);
batch.delete(docRef2);

// Commit the batch
batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        // ...
    }
});
...