3

タイトルはかなり自明です。

次のコード...:

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

URLにファイル形式が含まれていない場合は失敗します。たとえば、googleによってホストされている一部の画像は、画像を表示しますが、URLの一部としてファイル形式(.png、.jpgなど)を持っていません。

その結果、url接続のcontent-typeヘッダーは「text/html」を返します。これが問題だと思います。

新しいcontent-typeヘッダーを設定しようとしましたが、何も変わらないようです。

誰かが回避策を知っていますか?

ありがとう。

4

2 に答える 2

7

問題が発生していて、グーグルで検索したことを思い出しました。これが私の最終的な解決策でした

        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);
        }
于 2010-11-18T21:47:14.997 に答える
0

BitmapFactory.decodeStream画像自体の生のバイトストリームを読み取るだけで、URLやコンテンツエンコーディングについての知識がないため、ここで問題があるとは思いません。画像ヘッダーから直接画像形式を読み取ることができるはずです。

おそらくURLがリダイレクトされます。

于 2010-11-18T21:38:38.927 に答える