我获得了异步任务Android下载的文件长度为-1。
我获得了异步任务Android下载的文件长度为-1。
我有一个问题,文件的长度显示为-1。我已经尝试很多次来修复它。我不知道为什么会发生这种情况。而且,当我再次调用asynctask时,song1的值保持不变(但song1的值没有任何问题,我用toast测试过了)。‘song1’是一个字符串,每次都有不同的值。谢谢。\n在我的LogCat中,显示如下:\n03-08 20:25:17.714: D/ANDRO_ASYNC(14559): 文件长度:-1\n03-08 20:25:18.564: D/dalvikvm(14559): GC在112ms内释放了18632个对象/1179128字节\n03-08 20:25:18.864: I/global(14559): BufferedInputStream构造函数使用了默认的缓冲区大小。如果需要使用8k的缓冲区,则最好明确指定。\n03-08 20:25:18.874: D/ANDRO_ASYNC(14559): -420000\n03-08 20:25:18.954: D/ANDRO_ASYNC(14559): -700000\n03-08 20:25:18.984: D/ANDRO_ASYNC(14559): -1820000\n03-08 20:25:19.029: D/ANDRO_ASYNC(14559): -1960000
从以上代码中可以看出,当用户点击下载链接时,会调用`web.setDownloadListener`方法,该方法中通过`DownloadFile`类执行文件的下载操作,并传入下载链接`url`和文件大小`contentLength`作为参数。
然而,根据问题描述来看,问题出现在获取文件大小`contentLength`时,返回的值为-1,即获取到的文件大小为负数。这可能是由于异步任务`DownloadFile`在执行下载操作之前,就已经返回了-1的文件大小,导致问题出现。
要解决这个问题,可以尝试以下方法:
1. 确保下载链接`url`是正确的,可以通过打开链接验证。
2. 检查网络连接是否正常,如果网络连接不稳定,可能导致获取文件大小失败。
3. 检查是否有权限执行下载操作,例如是否添加了网络权限。
4. 可以尝试使用其他方法获取文件大小,例如通过HTTP请求头中的Content-Length字段获取。
以下是可能的解决方法示例:
web.setDownloadListener { url, userAgent, contentDisposition, mimeType, contentLength ->
val ul = url
val downloadTask = DownloadFile(this, url, contentLength)
downloadTask.execute(ul)
// 在异步任务执行完毕后,获取文件大小并进行处理
downloadTask.setOnPostExecuteListener { downloadedSize ->
// 处理文件大小
if (downloadedSize != -1) {
// 文件大小有效,进行后续操作
// ...
} else {
// 文件大小无效,处理异常情况
// ...
}
}
}
通过以上方法,可以解决获取文件大小为-1的问题,并确保获取到正确的文件大小进行后续操作。