Android FileNotFound Exception – не может getInputStream с URL-адреса изображения, у которого нет формата файла

Название довольно понятно.

Следующий код …:

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, будут отображать изображение, но не имеют формат файла (.png, .jpg и т. Д.) Как часть URL-адреса.

В результате заголовок типа содержимого URL-соединения возвращает «text / 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-адрес перенаправляется.