我在用着BitmapFactory.decodeStream
从 Android 中的 url 加载图像。我只想下载低于特定尺寸的图像,我目前正在使用getContentLength
检查这个。
然而,我被告知getContentLength
并不总是提供文件的大小,在这种情况下,我想在知道文件太大时立即停止下载。这样做的正确方法是什么?
这是我当前的代码。我目前返回 null ifgetContentLength
没有提供答案。
HttpGet httpRequest = new HttpGet(new URL(urlString).toURI());
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
final long contentLength = bufHttpEntity.getContentLength();
if ((contentLength >= 0 && (maxLength == 0 || contentLength < maxLength))) {
InputStream is = bufHttpEntity.getContent();
Bitmap bitmap = BitmapFactory.decodeStream(is);
return new BitmapDrawable(bitmap);
} else {
return null;
}
1.您也可以尝试这种方法。我相信它不会下载大文件的内容
HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
int length=connection.getContentLength();
if(length<max){
InputStream is = connection.getInputStream();
BitmapFactory.decodeStream(is,null,null);
}
这只是一个示例,您还可以添加 -1 和其他任何内容的检查。
这种方法与您所做的等效。这只是您可以尝试的又一种选择。我只知道 HttpURLConnection 在您开始从流中读取内容之前不会获取内容。所以这段代码不会下载大图片。我真的不知道 HttpClient 是否也这样做。
2.为什么实际上你想跳过较大的文件。如果您担心解码过程中内存不足,可以看看这个将图像加载到 Bitmap 对象时出现奇怪的内存不足问题。如果您应用inSampleSize,您甚至可以下载大图像。对于较大的图像,延迟会较大,但内存消耗会较低。我在这里发布了我的 ListView 示例ListView 中图像的延迟加载。它在 ListView 中显示图像。有不同尺寸的图像。图像不是很大,但无论如何。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)