アンドロイドするFileNotFound例外 - ファイル形式を持っていない画像URLからできるわけではありませんのgetInputStream
-
26-09-2019 - |
質問
タイトルはかなり自明です。
次のコードを...:
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ヘッダ接続戻る "テキスト/ HTML"。私は、これが問題であると考えています。
私は新しいContent-Typeヘッダを設定しようとしたが、それdoesntのは、変更何にも思えます。
誰もが回避策を知っていますか?
感謝ます。
解決
私が問題に実行していたと私の周りグーグル思い出し、これは私の最終的な解決策
でした 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
のみ画像自体の生のバイトストリームを読み込み、私は、彼らがここに過失があるとは思わないので、それは、URLについての知識やコンテンツのエンコーディングを持っていません。なお、画像ヘッダから直接画像形式を読み取ることができる必要があります。
おそらくURLがリダイレクトされます。
所属していません StackOverflow