Невозможно отменить файлЗагрузитьЗадача при отмене Нажатие кнопки

Я загружаю много изображений из firebase одно за другим с помощью функции download() с диалоговым окном выполнения. Для этого я внес в список FileDownloadTask. Теперь я хочу отменить загрузку оставшихся изображений при нажатии кнопки отмены, для этого я реализовал метод в OnClickListener, как показано в коде, но он не будет работать, и изображения будут продолжать загрузку.

List<FileDownloadTask> downloadTaskList = new ArrayList<>();
protected void download() throws IOException, JSONException {
        setDownloadProgressDialoag();
        imageList = image.getImages();
        File file = new File(context.getExternalFilesDir(null), "Images");
        if (!file.exists()) {
            file.mkdir();
        }
        for (Image image : imageList) {
            String url = image.getImageUrl();
            File imageFile = new File(file, i + "_" + image.getName() + ".jpg");
            if (!imageFile.exists()) {
                downloadRef = FirebaseStorage.getInstance().getReferenceFromUrl(url);
                    FileDownloadTask task = downloadRef.getFile(imageFile);
                    downloadTaskList.add(task);
                    task.addOnCompleteListener(new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
                            downloadProgressDialoag.incrementProgressBy(1);
                            downloadTaskList.remove(task);
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {

                        }
                    });
                    i++;
                }
        }
}

ПрогрессДиалог

private void setDownloadProgressDialoag() {
        downloadProgressDialoag = new ProgressDialog(context, R.style.PackLoaderDialog);
        downloadProgressDialoag.setTitle("Downloading Images...");
        downloadProgressDialoag.setMax(Image.noOfImage);
        downloadProgressDialoag.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        downloadProgressDialoag.setCancelable(false);
        downloadProgressDialoag.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                for(FileDownloadTask fileDownloadTask : downloadTaskList){
                    fileDownloadTask.cancel();
                }
            }
        });
        downloadProgressDialoag.show();
    }

Что я делаю не так? Пожалуйста помогите.

У вас ошибка или?

Alex Mamo 01.12.2018 10:52

Нет, я не получаю сообщение об ошибке, но когда я проверяю FileManager после отмены показа всех загруженных файлов. @AlexMamo

PATEL MEET 01.12.2018 13:09

Вы загружаете значительное количество файлов? Как вы обеспечиваете срабатывание отмены до того, как все файлы будут загружены? Я бы порекомендовал добавить слушателя onCancel и убедиться, что он вызывается.

Naveed 01.12.2018 22:35

Большое спасибо. Подскажите, что мне добавить в OnCancelListener ? Я добавил task.cancel, но он не работает. Изображения все еще продолжают скачиваться. @Naveed

PATEL MEET 02.12.2018 06:59

Вы можете просто добавить оператор журнала в свой OnCancel () и записать имя файла для чего-то, что было отменено. Что-то вроде "Task canceled for: " + imageFile.getName(). Также я воссоздал ваше дело, и отмена работает, как ожидалось. Я предполагаю, что вы загружаете недостаточно данных, поэтому файлы загружаются до того, как у вас появится возможность нажать «Отмена». Также следует отметить, что вы создаете новую задачу для каждого файла, и несколько задач могут выполняться одновременно. Таким образом, даже если вы вызовете отмену, задача, которая уже выполняется, все равно будет завершена.

Naveed 02.12.2018 19:24
0
5
108
0

Другие вопросы по теме