Как отменить загрузку с помощью модифицированного Android? - PullRequest
2 голосов
/ 16 мая 2019

У меня есть приложение, которое загружает файлы с сервера с помощью Retrofit ..... на моем макете xml У меня есть две кнопки, если вы нажимаете на них, они посылают разные параметры для загрузки разных файлов, эта часть работает нормально, я нажимаю наодна и программы начинают выводить файл и другие кнопки, и он загружает второй файл, когда первый завершен.У меня также есть кнопка отмены (чтобы отменить загрузку), проблема в том, что кнопка отмены работает только один раз, я думаю, потому что каждый раз, когда она создает новую «загрузку» со своим идентификатором.

Так что если янажмите «Загрузить 1», затем «Загрузить 2», а затем нажмите «Отмена». Я могу только отменить загрузку 2.

У меня вопрос, можно определить, какой файл отменить?

    <Button
        android:id="@+id/btn_download"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="128dp"
        android:layout_marginLeft="128dp"
        android:layout_marginTop="36dp"
        android:text="Download"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_download2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="128dp"
        android:layout_marginLeft="128dp"
        android:layout_marginTop="124dp"
        android:text="Download 2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <Button
        android:id="@+id/btn_cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="140dp"
        android:layout_marginLeft="140dp"
        android:layout_marginTop="196dp"

        android:text="Cancel"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />



 private void downloadFile(final String fileName, String f_id, final String id) {
        Retrofit.Builder builder = new Retrofit.Builder().baseUrl("mywebsite/api/")
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create());
        Retrofit retrofit = builder.build();

        FileDownloadClient fileDownloadClient = retrofit.create(FileDownloadClient.class);

        final String fileName = fileName;
        final String f_id   = f_id;

        Map<String, Object> postdata = new HashMap<>();
        postdata.put("Parametros", "aquii")
        postdata.put("Parametros", "aquii")
        postdata.put("Parametros", "aquii")

        final Call<ResponseBody> call = fileDownloadClient.downloadFileStream(postdata);

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, final Response<ResponseBody> response) {

                    sendOnChannel2("Download", "Download in progress", 2000, id);

                    new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... voids) {
                            boolean success = writeResponseBodyToDisk(response.body(), fileName, id);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    cancelButton.setVisibility(View.GONE);
                                    Toast.makeText(MainActivity.this, "Download Complete", Toast.LENGTH_LONG).show();
                                }
                            });
                            return null;
                        }
                    }.execute();
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                if(call.isCanceled()) {
                    Toast.makeText(MainActivity.this, "Request Cancelled :( ", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(MainActivity.this, "Download failed :(", Toast.LENGTH_LONG).show();
                }
            }
        });

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                call.cancel();
                cancelNotification("Download", "Download cancelled", 0, id);
            }
        });
    }
...