Исключение Android FileNotFoundFound - не может получить потерю от URL-адреса изображений, который не имеет формата файла
-
26-09-2019 - |
Вопрос
Название довольно объяснило.
Следующий код ...:
URL imageUrl = new URL(url);
try {
HttpURLConnection conn= (HttpURLConnection)imageUrl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
return BitmapFactory.decodeStream(is);
} catch (IOException e) {
e.printStackTrace();
}
Не удается, если URL-адрес не содержит формат файла. Например, некоторые изображения, размещенные Google Google, отобразит изображение, еще не имейте формата файла (.png, .jpg и т. Д.) в составе URL.
В результате заголовок типа содержимого устройства URL возвращает «Текст / HTML». Я верю, что это проблема.
Я попробовал установить новый заголовок типа содержимого, но это, кажется, ничего не меняет.
Кто-нибудь знает обходной путь?
Благодарю.
Решение
Я бежал в проблемы, и я вспомнил гуглами, и это было мое окончательное решение
try {
URL url = new URL(imageUrl);
HttpGet httpRequest = null;
httpRequest = new HttpGet(url.toURI());
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream input = bufHttpEntity.getContent();
Bitmap bitmap = BitmapFactory.decodeStream(input);
ImageActivity.this.i.setImageBitmap(bitmap);
ImageActivity.this.i.refreshDrawableState();
input.close();
} catch (MalformedURLException e) {
Log.e("ImageActivity", "bad url", e);
} catch (Exception e) {
Log.e("ImageActivity", "io error", e);
}
Другие советы
BitmapFactory.decodeStream
Только читает сырой байтовый поток самого изображения, оно не знает о URL-адреса, ни кодировке контента, поэтому я не думаю, что они находятся на вине здесь. Он должен быть в состоянии прочитать формат изображения непосредственно из заголовка изображения.
Вероятно, URL перенаправляется.