// 如果緩衝裡面有就從緩衝擷取,否則網路擷取圖片,返回Drawable對象 public static Drawable loadImageFromNetwork(Context context, String imageUrl) { Drawable drawable = null; if(imageUrl == null ) return null; String imagePath = ""; String fileName = ""; // 擷取url中圖片的檔案名稱與尾碼 if(imageUrl!=null&&imageUrl.length()!=0){ fileName = imageUrl.substring(imageUrl.lastIndexOf("/")+1); } // 圖片在手機本地的存放路徑,注意:fileName為空白的情況 imagePath = context.getCacheDir() + "/" + fileName; Log.i("test","imagePath = " + imagePath); File file = new File(context.getCacheDir(),fileName);// 儲存檔案 Log.i("test","file.toString()=" + file.toString()); if(!file.exists()&&!file.isDirectory()) { try { // 可以在這裡通過檔案名稱來判斷,是否本地有此圖片 FileOutputStream fos=new FileOutputStream( file ); InputStream is = new URL(imageUrl).openStream(); int data = is.read(); while(data!=-1){ fos.write(data); data=is.read();; } fos.close(); is.close(); // drawable = Drawable.createFromStream( // new URL(imageUrl).openStream(), file.toString() ); // (InputStream) new URL(imageUrl).getContent(); drawable = Drawable.createFromPath(file.toString()); Log.i("test", "file.exists()不檔案存在,網上下載:" + drawable.toString()); } catch (IOException e) { Log.d("test", e.getMessage()); } }else { drawable = Drawable.createFromPath(file.toString()); Log.i("test", "file.exists()檔案存在,本地擷取"); } if (drawable == null) { Log.d("test", "null drawable"); } else { Log.d("test", "not null drawable"); } return drawable ; }
AsyncTask擷取url圖片
mImageView = (ImageView)this.findViewById(R.id.imageThreadConcept) ; new DownloadImageTask().execute(IMAGE_URL) ; private class DownloadImageTask extends AsyncTask<String, Void, Drawable> { protected Drawable doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Drawable result) { mImageView.setImageDrawable(result); } }