Android FileNotFound Exception - ne peut pas getInputStream d'URL de l'image qui ne possède pas le format de fichier

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

Question

Le titre est assez explicite.

le code suivant ...:

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

échouera si l'URL ne contient pas le format de fichier. Par exemple, certaines images hébergées par Google affiche l'image mais pas le format de fichier (.png, .jpg, etc.) dans le cadre de l'URL.

En conséquence, l'en-tête de type de contenu des retours de connexion url "text / html". Je crois que c'est la question.

J'ai essayé d'installer un nouvel en-tête de type de contenu, mais cela ne semble rien de changement.

Quelqu'un sait-il une solution de contournement?

merci.

Était-ce utile?

La solution

je courais dans les problèmes et je me suis souvenu googler autour et ce fut ma solution finale

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

Autres conseils

BitmapFactory.decodeStream ne lit que le flux d'octets brut de l'image elle-même, elle n'a pas connaissance de l'URL, ni le codage de contenu, donc je ne pense pas qu'ils sont en faute. Il devrait être capable de lire le format d'image directement à partir de l'en-tête d'image.

Probablement l'URL est redirigé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top