【发布时间】:2013-03-05 14:09:38
【问题描述】:
我正在开发一个使用 http 连接下载文件的项目。我在下载过程中显示一个带有进度条状态的水平进度条。 我的函数如下所示:
.......
try {
InputStream myInput = urlconnect.getInputStream();
BufferedInputStream buffinput = new BufferedInputStream(myInput);
ByteArrayBuffer baf = new ByteArrayBuffer(capacity);
int current = 0;
while((current = buffinput.read()) != -1) {
baf.append((byte) current);
}
File outputfile = new File(createRepertory(app, 0), Filename);
FileOutputStream myOutPut = new FileOutputStream(outputfile);
myOutPut.write(baf.toByteArray());
...
}
我事先知道我的文件的大小,所以我需要在下载期间检索大小(在我的 while 块中)。这样我就可以确定进度条的状态了。
progressBarStatus = ((int) downloadFileHttp(url, app) * 100)/sizefile;
long downloadFileHttp(.., ..) 是我的函数名。
我已经尝试使用 outputfile.length 来检索它,但他的值是“1”,这可能是我尝试下载的文件数。
有什么办法可以解决吗?
更新 1
我没有任何线索可以让我弄清楚这一点。 目前我有一个水平进度条,它只显示 0 和 100% 的中间值。一世 考虑另一种方法。如果我知道我的 wifi 的速率和 文件的大小我可以决定下载的时间。
我知道我可以检索我的 Wifi 的那条信息 连接和我要下载的文件的大小。
有没有人已经工作过或者有过讨论?
【问题讨论】:
-
由于您是从流中手动读取字节,因此您可以在 while 循环中保留一个计数器,它将复制的字节数相加。让它变得易失,你可以从另一个线程中读取它。你也可以使用 baf.length(),但这不是线程安全的(我相信)。
-
感谢@AlexanderTorstling。我已经尝试检索 baf 的长度,但是当我尝试返回他的值时,它捕获了一个异常
-
那有什么用?用于更新 UI 状态?
-
@chintankhetiya 是的,我正在尝试显示带有状态的进度条。
标签: java android http download