AsyncTask 在 ImageView 上加载图片:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
private ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
final File cacheDir = getCacheDir();
Bitmap bitmap = null;
if (Utill.isMemoryAvaliable(dir.getPath())){
String url = urls[0];
String filename = url.substring(url.lastIndexOf("/")+1,url.contains("?")?url.indexOf("?"):url.length());
File f = new File(cacheDir, filename);
//from SD cache
if(!f.exists()){
try {
Utill.DownloadFromUrl(url, filename, cacheDir);
} catch (IOException ex) {
Log.e("Error", "Download", ex);
}
}
if(f.exists())
bitmap = decodeFile(new File(cacheDir, filename));
}
return bitmap;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
private Bitmap decodeFile(File f) {
try {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (FileNotFoundException e) {
Log.e("Error", "Decode File", e);
}
return null;
}
}
要下载图片:
public static boolean downloadFromUrl(String downloadUrl, String fileName, File dir) throws IOException {
if (URLUtil.isValidUrl(downloadUrl)) {
System.setProperty("http.keepAlive", "false");
URL url = new URL(downloadUrl);
HttpURLConnection ucon = (HttpURLConnection) url.openConnection();
ucon.setRequestProperty("Connection", "Keep-Alive");
ucon.setConnectTimeout(50000);
ucon.connect();
if (ucon.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream is = url.openStream();
if (is.available() > 0) {
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
File file = new File(dir, fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
}
is.close();
return true;
} else {
return false;
}
}
return false;
}