Android FileNotFound Exception - Cannot getInputStream from image URL that does not have file format

佐手、 提交于 2019-11-27 07:24:28

问题


The title is pretty self explanatory.

the following code...:

    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();
           }

Will fail if the url does not contain the file format. For example, some images hosted by google will display the image yet not have the file format (.png, .jpg, etc) as part of the url.

As a result, the content-type header of the url connection returns "text/html". I believe this is the issue.

I have tried setting a new content-type header, but that doesnt seem to change anything.

anybody know a workaround?

thanks.


回答1:


I was running into problems and I remembered googling around and this was my final solution

        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);
        }



回答2:


BitmapFactory.decodeStream only reads the raw byte stream of the image itself, it has no knowledge about the URL nor the Content Encoding, so I don't think they are at fault here. It should be able to read the image format directly from the image header.

Probably the URL gets redirected.



来源:https://stackoverflow.com/questions/4218807/android-filenotfound-exception-cannot-getinputstream-from-image-url-that-does

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!