Я использую BitmapFactory.decodeStream
для загрузки изображения с URL-адреса в Android. Я хочу только загружать изображения ниже определенного размера, и в настоящее время я использую getContentLength
, чтобы проверить это.Загрузить изображение с url в Android, только если оно будет
Однако мне говорят, что getContentLength
не всегда обеспечивает размер файла, и в этих случаях я хотел бы остановить загрузку, как только узнаю, что файл слишком большой. Каков правильный способ сделать это?
Вот мой текущий код. В настоящее время я возвращаю null, если getContentLength
не дает ответа.
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;
}
Я знаю, что это не решает вашу проблему, когда сервер не предоставляет Content-Length, но я думаю, что если вы используете HttpGet, возможно, вы получаете контент, хотите ли вы этого или нет. Если он только получает его, когда вы читаете из потока, просто игнорируйте мой ответ! – Nick
Спасибо, Ник. Я не знаю, будет ли использование HttpHead экономить пропускную способность, но в моем конкретном случае я предпочитаю хранить HTTP-запросы в minimun. – hpique