我使用以下代码将图像下载到我的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中检测文件大小,还是有另外一种方法来检测下载完成?
答案 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");
}