アンドロイドのあれこれ
[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