アンドロイドのあれこれ
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
もう少し便利な、Web上の画像の取得方法&一時キャッシュのとり方
AndroidアプリにインターネットなどでWeb上にある画像を表示させたいとき、タスク管理、データのキャッシュの簡単な例を紹介します。
bitmap型データを一時的にメモリ上で保存する
AsyncTaskを使ってバックグラウンドで画像を取得する
実装例
// ImageCache.java public class ImageCache { private static HashMap<String, Bitmap> cache = new HashMap<String, Bitmap>(); public static Bitmap getImage(String key) { if (cache.containsKey(key)) { return cache.get(key); } return null; } public static void setImage(String key, Bitmap image) { cache.put(key, image); } public static void clearCache() { cache = null; cache = new HashMap<String, Bitmap>(); } }
AsyncTaskを使ってバックグラウンドで画像を取得する
// ImageGetTask.java public class ImageGetTask extends AsyncTask<String, Integer, Bitmap> { private ImageView mImage; private String tag; private Context mContext; public ImageGetTask(ImageView image, Context context){ mImage = image; tag = image.getTag().toString(); mContext = context; } @Override protected Bitmap doInBackground(String... params){ Bitmap img = ImageCache.getImage(params[0]); try { if (img == null) { URL imgUrl = new URL(params[0]); img = BitmapFactory.decodeStream(imgUrl.openStream()); ImageCache.setImage(params[0], img); } return img; } catch(IOException e) { return null; } } @Override protected void onPostExecute(Bitmap result){ if (tag.equals(mImage.getTag())) { if (result != null){ mImage.setImageBitmap(result); } else { mImage.setImageDrawable(mContext.getResources().getDrawable(R.drawable.ic_launcher)); } mImage.setVisibility(View.VISIBLE); } } }
実装例
// MainActivity.java public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onResume() { super.onResume(); String imgUriStr = "http://3.bp.blogspot.com/-2Trw6XxAZMY/Tt5SOyqUwkI/AAAAAAAAIw8/Pl1v7EdRpCE/s800/graph_only_3.jpg"; ImageView imgView = (ImageView)findViewById(R.id.imageView); imgView.setTag(imgUriStr); Bitmap imgBitmap = ImageCache.getImage(imgUriStr); if (imgBitmap != null) { imgView.setImageBitmap(imgBitmap); } else { imgView.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); ImageGetTask imgTask = new ImageGetTask(imgView, this); imgTask.execute(imgUriStr); } } @Override protected void onDestroy() { super.onDestroy(); ImageCache.clearCache(); } }
COMMENT