public class MainActivity extends Activity { private ImageView showimage; private String url = "http://b.hiphotos.baidu.com/image/pic/item/d1160924ab18972bf5f68cc8e0cd7b899f510ae7.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showimage = (ImageView) this.findViewById(R.id.showimage); } public void download(View view) { // 一、没有图片,设置默认图片 showimage.setImageResource(R.drawable.ic_launcher); // 二、判断本地是否有图片 Bitmap bitmap = FileUtils.readImage(url);//调用工具类的读取图片的方法 if (bitmap != null) { showimage.setImageBitmap(bitmap); } else { new MyAsyncTask().execute(url); // 3.没有就联网下载 } } class MyAsyncTask extends AsyncTask<String, Void, byte[]> { @Override protected byte[] doInBackground(String... params) { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(params[0]); try { HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { byte[] data = EntityUtils.toByteArray(response.getEntity()); FileUtils.saveImage(params[0], data);//写到SD卡 } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(byte[] result) { // 返回主线程,更新UI if (result != null) { Bitmap bm = BitmapFactory.decodeByteArray(result, 0, result.length); showimage.setImageBitmap(bm); } super.onPostExecute(result); } } } //保存工具类 public class FileUtils { /** * 操做SDcard卡的文件工具类 */ // 获取当前的SD卡的根路径// 定义一个缓存目录 private static final String SDCACHE_DIR = Environment .getExternalStorageDirectory() + "/myimages"; private static final int COMP_JPG = 0;// 图片类型常量 private static final int COMP_PNG = 1; private static final String TAG = "MainActivity"; /** * 判断SD卡是否挂载 * * @return */ public static boolean isSDMount() { String state = Environment.getExternalStorageState(); return state.equals(Environment.MEDIA_MOUNTED); } /** * 保存图片方法一 * * @param url * @param data */ public static void saveImage(String url, byte[] data) { // 一、判断是否有SD卡 if (!isSDMount()) { return; } // 2.判断是否有缓存的文件夹 File file = new File(SDCACHE_DIR); if (!file.exists()) { file.mkdirs();// 能够建立多层目录 } // 3.把图片保存到SD卡 File filepic = new File(file, getFilename(url)); OutputStream out; try { out = new FileOutputStream(filepic); out.write(data); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 保存图片方法二 * * @param url * @param data */ public static void saveImage(String url, Bitmap bitmap, int format) { // 一、判断是否有SD卡 if (!isSDMount()) { return; } // 2.判断是否有缓存的文件夹 File file = new File(SDCACHE_DIR); if (!file.exists()) { file.mkdirs();// 能够建立多层目录 } // 3.把图片保存到SD卡 File filepic = new File(file, getFilename(url)); try { OutputStream out = new FileOutputStream(filepic); // compress()将一个流转换为位图,并保存到SD卡 bitmap.compress((format == COMP_JPG ? CompressFormat.JPEG : CompressFormat.PNG), 100, out); } catch (FileNotFoundException e) { e.printStackTrace(); } } /** * 获取图片文件的名字 * * @param url * @return */ public static String getFilename(String url) { return url.substring(url.lastIndexOf("/") + 1);// http://xxxx/filename.jpg } public static Bitmap readImage(String url) { // 先判断SD是否挂载 if (!isSDMount()) { return null; } File file = new File(SDCACHE_DIR, getFilename(url)); if (file.exists()) { return BitmapFactory.decodeFile(file.getAbsolutePath()); } return null; } }