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; } }