Отменить загрузку файла с OkHttp3 - PullRequest
0 голосов
/ 13 января 2020

Я хочу отменить загруженный файл с помощью Okio, он запускается в AsyncTaks. Когда я отменяю Asynctask downloadFilerunTask.cancel () Я могу избавиться от процесса загрузки с использованием break, но загруженный процесс не отменен, как можно Я отменил скачанный поток и остановил AsynTask в android

@Override
protected String doInBackground(String... strings) {

    for(int i=0; i<fileList.size(); i++) {    
        if (Utils.getStatusAbort()) {

                                      request = new Request.Builder().url(fileList.get(i))
                        .addHeader("Authorization", header)
                        .addHeader("Content-Type", "application/json")
                        .build();
                try {
                    okhttp3.Response response = client.newCall(request).execute();
                    ResponseBody body = response.body();
                    int finalI = i;
                    ZipFile zipFile;

                    if (response.isSuccessful()) {
                        try {
                            Log.i("body", "" + body);
                            destFilePath = Utils.getDestFilePath(context, fileNameList.get(i));
                            downloadedFile = new File(destFilePath, fileNameList.get(i));
                            BufferedSink sink = Okio.buffer(Okio.sink(downloadedFile));
                            if (response.body() != null) {
                                sink.writeAll(response.body().source());
                            }
                            sink.close();

                            Utils.savedStateOfApp(context, "publish");

                            //Log.i("md5:" + md5List.get(i), " = " + Utils.calculateMD5(new File(Utils.getDestFilePath(context, fileNameList.get(i)) + "/" + fileNameList.get(i))));

                        } catch (Exception e) {
                            e.printStackTrace();
                        }

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);

}

1 Ответ

0 голосов
/ 21 января 2020

Вам необходимо вызвать cancel() для Call объекта, который вы создали с помощью client.newCall(request). Реализуйте метод onCancelled() в AsyncTask:

@Override
protected void onCancelled() {
    if (call != null) {
        call.cancel();
    }
}
...