我获得了异步任务Android下载的文件长度为-1。

7 浏览
0 Comments

我获得了异步任务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

0
0 Comments

问题的原因是服务器发送数据的缓冲区已满,但仍然不知道响应的完整大小,或者是因为懒惰的开发人员。解决方法是在流结束之前继续加载信息。问题可能是在onProgressUpdate方法中没有使用进度条的值,导致进度条一直停留在0%。解决方法是检查onProgressUpdate方法中的代码,确保使用的进度值是正确的。这个问题也可能与AsyncTask和ProgressDialog的使用有关,可以参考stackoverflow上的一个问题来解决。另外,当获取到-1作为内容长度时,将无法使用进度条。如果多次尝试下载仍然出现-1的问题,可能需要检查服务器的设置或与服务器管理员联系。

0
0 Comments

从以上代码中可以看出,当用户点击下载链接时,会调用`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的问题,并确保获取到正确的文件大小进行后续操作。

0