Exceção do Android FilENotFound - não pode getInputStream do URL da imagem que não possui formato de arquivo
-
26-09-2019 - |
Pergunta
O título é bastante auto -explicativo.
O seguinte código ...:
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();
}
Falhará se o URL não conter o formato do arquivo. Por exemplo, algumas imagens hospedadas pelo Google exibirão a imagem, mas ainda não terão o formato de arquivo (.png, .jpg, etc) como parte do URL.
Como resultado, o cabeçalho do tipo conteúdo da conexão URL retorna "Texto/HTML". Eu acredito que esse é o problema.
Eu tentei definir um novo cabeçalho do tipo conteúdo, mas isso parece não mudar nada.
Alguém conhece uma solução alternativa?
obrigado.
Solução
Eu estava enfrentando problemas e lembrei -me de pesquisar no Google e essa foi minha solução final
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);
}
Outras dicas
BitmapFactory.decodeStream
Somente lê o fluxo de bytes cru da própria imagem, ela não tem conhecimento sobre o URL nem a codificação de conteúdo, por isso não acho que eles sejam culpados aqui. Ele deve ser capaz de ler o formato da imagem diretamente do cabeçalho da imagem.
Provavelmente o URL é redirecionado.