android非同期ダウンロード画像
SyncImageLoaderピクチャ非同期ダウンロードツールクラス
CallbackImplementsコールバックインタフェース実装クラス.
Activityで呼び出す
package mars.async.down.utils;
import java.lang.ref.SoftReference;
import java.net.URL;
import java.util.HashMap;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
public class SyncImageLoader {
private HashMap<String, SoftReference<Drawable>> imageCache = new HashMap<String, SoftReference<Drawable>>();
// URL , Drawable
public Drawable loadImageFormUrl(String imageUrl) {
try {
return Drawable.createFromStream(new URL(imageUrl).openStream(),
"src");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public Drawable loadDrawable(final String imageUrl,
final ImageCallback imageCallback) {
// imageUrl
if (imageCache.containsKey(imageUrl)) {
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
if (softReference.get() != null) {
return softReference.get();
}
}
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
imageCallback.imageLoaded((Drawable) msg.obj);
}
};
// ,
new Thread() {
@Override
public void run() {
//
Drawable drawable = loadImageFormUrl(imageUrl);
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message msg = handler.obtainMessage(0, drawable);
handler.sendMessage(msg);
}
}.start();
return null;
}
// ,
public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable);
}
}
CallbackImplementsコールバックインタフェース実装クラス.
package mars.async.down.utils;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
public class CallbackImplements implements SyncImageLoader.ImageCallback {
private ImageView imageView;
public CallbackImplements(ImageView imageView) {
super();
this.imageView = imageView;
}
@Override
public void imageLoaded(Drawable imageDrawable) {
imageView.setImageDrawable(imageDrawable);
}
}
Activityで呼び出す
package mars.async.down;
import mars.async.down.utils.CallbackImplements;
import mars.async.down.utils.SyncImageLoader;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends Activity {
private SyncImageLoader syncImageLoader = new SyncImageLoader();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
loadImage("http://www.android.com/images/icon-partners.png",
R.id.imageView1);
loadImage("http://www.android.com/images/icon-dev.png", R.id.imageView2);
loadImage("http://www.android.com/images/icon-market.png",
R.id.imageView3);
}
// url: url
// id:ImageView ID
private void loadImage(String url, int id) {
ImageView imageView = (ImageView) findViewById(id);
CallbackImplements callbackImplements = new CallbackImplements(
imageView);
Drawable cacheImage = syncImageLoader.loadDrawable(url,
callbackImplements);
// , image. callback
if (cacheImage != null) {
imageView.setImageDrawable(cacheImage);
}
}
}