URL から画像をダウンロードして ImageView として表示しようとしています。ダウンロードは、AsyncTask を使用してバックグラウンドで行われます。ただし、BitmapFactory の decodeStream を呼び出すと、常に null オブジェクトが返されます。接続用に提供された URL が正しいことを確認しましたが、BitmapFactory は HTTP 接続によって返された InputStream から画像を読み取ることができないようです。以下にコードを示します。
@Override
protected Bitmap doInBackground(String... uri) {
Bitmap bm = null;
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(Uri.encode(uri[0]));
try {
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
String contentType = entity.getContentType().getValue();
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int halfScreen = metrics.widthPixels / 2;
int photoWidth = halfScreen > 200 ? 200 : halfScreen;
if (contentType.contains("image/jpeg") || contentType.contains("image/png") || contentType.contains("image/gif")) {
bm = BitmapFactory.decodeStream(new BufferedInputStream(entity.getContent()));
if (bm.getWidth() > photoWidth)
bm = Bitmap.createScaledBitmap(bm, photoWidth, Math.round((photoWidth*bm.getHeight())/bm.getWidth()), true);
}
} catch (Exception e) {
bm = null;
}
return bm;
}
奇妙なことに、Nexus S ではまったく同じコードが正常に動作しますが、Android 2.1-update1 を実行している Samsung では動作しません。