android中下载图片的工具类的实现
package com.demo.loading;
import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class LoadImage {
private ExecutorService executorService; // 固定五个线程来
/*** 文件缓存 ***/
private ImageFileCache fileCache;
private static LoadImage instance;
String TAG = LoadImage.class.getSimpleName();
public static LoadImage getInstance() {
if (instance == null) {
instance = new LoadImage();
}
return instance;
}
public LoadImage() {
executorService = Executors.newFixedThreadPool(5);
new ImageMemoryCache();
fileCache = new ImageFileCache();
new HashMap<String, Object[]>();
}
/**
* 下载图片
*
* @param url
*/
public void downImage(String url, String cardType) {
executorService.submit(new downImageTask(url, cardType));
}
/**
* 下载图片线程任务
*
* @author Administrator
*
*/
private class downImageTask extends Thread {
private String url;
private String cardType;
private File CardPic;
public downImageTask(String url, String cardType) {
this.url = url;
this.cardType = cardType;
if (url.contains(".jpg") || url.contains(".JPEG"))
CardPic = new File("/mnt/sdcard/fetchdata/images/" + cardType
+ ".jpg");
else if (url.contains(".png") || url.contains(".PNG"))
CardPic = new File("/mnt/sdcard/fetchdata/images/" + cardType
+ ".png");
}
@Override
public void run() {
try {
if (!fileCache.exists(url)
|| (CardPic.exists() && CardPic.length() == 0l)
|| !CardPic.exists()) {
// 从网络获取
byte[] bData = ImageGetForHttp.getStream(url);
// 写入本地
if (bData != null && bData.length > 0) {
fileCache.saveBmpToSd(bData, url, cardType);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取网落图片资源
*
* @param url
* @return
*/
public static Bitmap getHttpBitmap(String url) {
URL myFileURL;
Bitmap bitmap = null;
try {
myFileURL = new URL(url);
// 获得连接
HttpURLConnection conn = (HttpURLConnection) myFileURL
.openConnection();
// 设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
conn.setConnectTimeout(6000);
// 连接设置获得数据流
conn.setDoInput(true);
// 不使用缓存
conn.setUseCaches(false);
// 这句可有可无,没有影响
// conn.connect();
// 得到数据流
InputStream is = conn.getInputStream();
// 解析得到图片
bitmap = BitmapFactory.decodeStream(is);
// 关闭数据流
is.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
}