开发者

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

开发者 https://www.devze.com 2023-01-25 15:33 出处:网络
The title is pretty self explanatory. the following code...: URL imageUrl = new URL(url); try { HttpURLConnection conn= (HttpURLConnection)imageUrl.openConnection();

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 k开发者_StackOverflownow a workaround?

thanks.


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


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消