3

タイトルはかなりわかりやすいです。Android FileNotFound例外 - ファイル形式のない画像URLからgetInputStreamを取得できない

次のコード...:URLはファイル形式が含まれていない場合

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

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

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

新しいコンテンツタイプのヘッダーを設定しようとしましたが、何も変更されていないようです。

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

ありがとうございました。

+0

私の最終的な解決策でしたか? –

答えて

7

私が問題に実行していたし、私の周りグーグル思い出して、あなたが失敗した例のURLを与えることができ、これは

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

これが修正されました!アロンに感謝します!私は、ApacheのHttpGet、HttpClient、HttpResponse、およびHttpEntityオブジェクトを利用しているために修正がうまくいったと思います。これらはHttpUrlConnectionオブジェクトに取って代わられ、明らかにいくつかのことをよりよく処理します。私はBufferedHttpEntityに精通していませんが、それはおそらくそれに関係する大きなこともあります。 – reliks

+0

Aaronに感謝します。私のためにうまく働いています – CoDe

+0

Thanx Aron。それは私のために働いた –

0

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

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

関連する問題