android - 使用 OkHttp3 取消下载文件
问题描述
我想用 Okio 取消下载的文件,它在 AsyncTaks中运行
@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);
}
解决方案
您需要调用您创建cancel()
的对象。在 AsyncTask 中实现方法:Call
client.newCall(request)
onCancelled()
@Override
protected void onCancelled() {
if (call != null) {
call.cancel();
}
}
推荐阅读
- excel - Excel VBA || 在过滤范围内填充值
- f# - 如何在 Elmish.WPF 中完成子/子模型到父/主模型的消息传递?
- r - R:如何在特定列上删除包含小于 -4 和大于 4 的任何值的行?
- .net-core - 生产机器上的 aspnet 核心部署正在使用开发机器路径寻找 appsettings.json
- javascript - 在javascript中传递选中的复选框值
- javascript - 如何从普通 Javascript 文件中的 React 功能组件访问函数?
- typescript - 使用具有强类型字段的对象设置通用类型可选映射
- javascript - 如何获取 URL 参数并将其传递给 HTML 输出
- php - 如何修复 Laravel Illegal mix of collations 错误?
- javascript - 将 blob 转换为 Excel 文件并下载,文件无法打开