取消使用OkHttp3下载文件

问题描述 投票:0回答:1

我想用Okio取消下载的文件,它在AsyncTaks中运行当我取消Asynctask downloadedFilerunTask.cancel()我可以使用break摆脱下载过程,但是下载的过程没有取消,我该如何取消下载流并在Android中停止了AsynTask

@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);

}
android android-asynctask okio
1个回答
0
投票
您需要在用cancel()创建的Call对象上调用client.newCall(request)。在AsyncTask中实现onCancelled()方法:

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

© www.soinside.com 2019 - 2024. All rights reserved.