我正在使用"getBytes"从存储中下载json文件,但如果下载时间超过10秒,我想取消下载。方法"getBytes"返回一个没有cancel方法的"Task"类型,而"getFile"返回的"FileDownloadTask"确实有cancel方法。那么,有没有一种方法可以使用"getBytes"取消下载,我可以将"Task"转换为"FileDownloadTask"吗?
编辑:这是我的代码:
mainStorageRef.child(UNIVERSITIES_DATA_STORAGE_PATH).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
String jsonData = new String(bytes, StandardCharsets.UTF_8);
...
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
FastUtils.toastAndLogConnectionFailure(context, e);
}
});
此处的火焰发生器
就我从(闭源代码(实现中看到的,您从getBytes()
返回的任务是而不是FileDownloadTask
。相反,它是由TaskCompletionSource
对象构造的直接Task<byte[]>
。因此,它不能取消。
不过,你的请求似乎是合理的,所以我建议提交一份功能请求,让工程团队意识到这一点
目前,我建议使用getStream()
方法,它为您提供了一个可以取消的StreamDownloadTask
任务。然后,您可以将流内容读取到ByteArrayOutputStream
中,这与getBytes
方法在内部所做的差不多。