Exceção do Android FilENotFound - não pode getInputStream do URL da imagem que não possui formato de arquivo

StackOverflow https://stackoverflow.com/questions/4218807

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top