2

我使用以下代码将图像下载到我的 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 检测文件大小,还是有另一种方法可以检测下载完成?

4

3 回答 3

5

我建议使用Google Volley,它提供了一个超级简单的网络接口,特别是图像加载。它会为您处理线程和批处理。

这是 Google 在 Google Play 应用程序上使用的。

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

于 2013-08-27T08:26:21.363 回答
0

尝试这样的事情。我想它可以帮助你。

于 2013-08-27T08:26:27.673 回答
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");
}
于 2013-08-27T08:27:05.323 回答