package com.kaixin.android.async;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
import com.kaixin.android.common.Constants;
import com.kaixin.android.utils.CallService;
/**
* 图片加载工具类
*/
public class BitmapDownloaderTask extends AsyncTask<Map<String, String>, Void, Bitmap> {
// 使用WeakReference解决内存问题,可以有效避免OOM的发生
private final WeakReference<ImageView> imageViewReference;
public BitmapDownloaderTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
// 实际的下载线程,内部其实是concurrent线程,所以不会阻塞
@Override
protected Bitmap doInBackground(Map<String, String>... params) {
InputStream is = (InputStream) CallService.getObject(Constants.getUrl() + "/PhotoServlet", new String[]
{ "albumId", "filename", "original", "uid" }, new String[]
{ params[0].get("albumId"), params[0].get("filename"), params[0].get("original") , params[0].get("uid")}, true);
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) { // 下载完后执行的
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap); // 下载完设置imageview为刚才下载的bitmap对象
}
}
}
}