如何检测整个图像是否已在Android中下载

时间:2013-08-27 08:21:01

标签: java android

我使用以下代码将图像下载到我的Android应用程序中:

private void download(URL url, File file) throws IOException {
    Log.d(TAG, "download(): downloading file: " + url);

    URLConnection urlConnection = url.openConnection();
    InputStream inputStream = urlConnection.getInputStream();
    BufferedInputStream bufferStream;
    OutputStream outputStream = null;
    try {
        bufferStream = new BufferedInputStream(inputStream, 512);
        outputStream = new FileOutputStream(file);
        byte[] buffer = new byte[512];
        int current;
        while ((current = bufferStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, current);
        }
    } finally {
        if (outputStream != null) {
            outputStream.close();
        }
        if (inputStream != null) {
            inputStream.close();
        }
    }
}

此代码工作正常,但一些用户和测试人员抱怨不完整的照片。我怀疑小网络滞后会中断连接。 所以我想检测是否已下载整个图像并保存文件是完整图像。有没有办法如何从BufferedInputStream中检测文件大小,还是有另外一种方法来检测下载完成?

3 个答案:

答案 0 :(得分:5)

我建议使用Google Volley,它为网络提供了一个超级简单的界面,特别是图像加载。它负责为您进行线程化和批处理。

这是Google在Google Play应用中使用的内容。

它将通过提供在作业完成时通知您的侦听器来解决您的问题。

答案 1 :(得分:0)

尝试this之类的内容。我认为它可以帮到你。

答案 2 :(得分:0)

如果您通过HTTP下载普​​通文件,URLConnection的方法getContentLength()将为您提供文件最终应具有的长度。

您可以将此方法的返回值与下载数据的文件长度/长度进行比较。如果它相等,那么文件就完成了:

int contentLength = urlConnection.getContentLength();
if (contentLength != -1) {
    if (contentLength == file.length()) {
        System.out.println("file is complete");
    } else {
        System.out.println("file is incomplete");
    }
} else {
    System.out.println("unknown if file is complete");
}