亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android實(shí)現(xiàn)從網(wǎng)絡(luò)獲取圖片顯示并保存到SD卡的方法

 更新時(shí)間:2015年12月11日 09:57:49   作者:Sunnyfans  
這篇文章主要介紹了Android實(shí)現(xiàn)從網(wǎng)絡(luò)獲取圖片顯示并保存到SD卡的方法,涉及Android操作多媒體文件及系統(tǒng)硬件設(shè)備的相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了Android實(shí)現(xiàn)從網(wǎng)絡(luò)獲取圖片顯示并保存到SD卡的方法。分享給大家供大家參考,具體如下:

問(wèn)題:

如何不斷獲取圖片并顯示出來(lái),達(dá)到視頻的效果?

代碼:

public class GetPictureFromInternetActivity extends Activity 
{ 
 private ImageView imageView; 
 public void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.main); 
  String url = "http://img1.gcimg.net/att/day_120330/1203301402671605a8a7994804.png"; 
// String url = "http://www.gezila.com/uploads/allimg/110110/1_110110084544_1.jpg"; 
 imageView = (ImageView) this.findViewById(R.id.imageView); 
 Bitmap bitmap = getHttpBitmap(url);//從網(wǎng)絡(luò)獲取圖片 
 imageView.setImageBitmap(bitmap); 
 savePicture(bitmap);//保存圖片到SD卡 
 } 
 public Bitmap getHttpBitmap(String url) 
 { 
 Bitmap bitmap = null; 
 try 
 { 
  URL pictureUrl = new URL(url); 
  InputStream in = pictureUrl.openStream(); 
  bitmap = BitmapFactory.decodeStream(in); 
  in.close(); 
 } catch (MalformedURLException e) 
 { 
  e.printStackTrace(); 
 } catch (IOException e) 
 { 
  e.printStackTrace(); 
 } 
 return bitmap; 
 } 
 public void savePicture(Bitmap bitmap) 
 { 
 String pictureName = "/mnt/sdcard/" + "car"+".jpg"; 
 File file = new File(pictureName); 
 FileOutputStream out; 
 try 
 { 
  out = new FileOutputStream(file); 
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
  out.flush(); 
  out.close(); 
 } catch (FileNotFoundException e) 
 { 
  e.printStackTrace(); 
 } catch (IOException e) 
 { 
  e.printStackTrace(); 
 } 
 } 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 super.onCreateOptionsMenu(menu); 
 MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit"); 
 item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() 
 { 
  public boolean onMenuItemClick(MenuItem item) 
  { 
  System.exit(0); 
  return true; 
  } 
 }); 
 return true; 
 } 
}

注意:1、權(quán)限問(wèn)題

涉及網(wǎng)絡(luò)時(shí)的權(quán)限:

復(fù)制代碼 代碼如下:
<uses-permission android:name="android.permission.INTERNET"/>

涉及SD卡讀寫(xiě)權(quán)限:
復(fù)制代碼 代碼如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

問(wèn)題分解:

問(wèn)題1、如何從網(wǎng)絡(luò)獲取圖片并顯示:

問(wèn)題2、如何不斷顯示圖片:

擴(kuò)展:如何保存獲取到的圖片:

問(wèn)題1解決方案:

看似有三種選擇方案,其實(shí)質(zhì)就一種模式,換湯不換藥。先通過(guò)統(tǒng)一資源定位器URl(uniform resource location)獲取一個(gè)讀取圖片流,然后將其解壓成Bitmap,最后顯示出來(lái)。具體實(shí)現(xiàn)代碼如下:

選擇1:直接類(lèi)URL打開(kāi)一個(gè)流,最簡(jiǎn)單實(shí)用。

public Bitmap getHttpBitmap(String url) 
{ 
 Bitmap bitmap = null; 
 try 
 { 
  URL pictureUrl = new URL(url); 
  InputStream in = pictureUrl.openStream(); 
  bitmap = BitmapFactory.decodeStream(in); 
  in.close(); 
 } catch (MalformedURLException e) 
 { 
  e.printStackTrace(); 
 } catch (IOException e) 
 { 
  e.printStackTrace(); 
 } 
 return bitmap; 
}

選擇2:用到類(lèi)URLConnection打開(kāi)連接

public Bitmap getHttpBitmap(String url) 
{ 
 Bitmap bitmap = null; 
 try 
 { 
  URL pictureUrl = new URL(url); 
  URLConnection con = pictureUrl.openConnection(); 
  InputStream in = con.getInputStream(); 
  bitmap = BitmapFactory.decodeStream(in); 
  in.close(); 
 } catch (MalformedURLException e) 
 { 
  e.printStackTrace(); 
 } catch (IOException e) 
 { 
  e.printStackTrace(); 
 } 
 return bitmap; 
}

選擇3:用到類(lèi)HttpURLConnection打開(kāi)連接

public Bitmap getHttpBitmap(String url) 
{ 
 Bitmap bitmap = null; 
 try 
 { 
  URL pictureUrl = new URL(url); 
  HttpURLConnection con = (HttpURLConnection) pictureUrl.openConnection(); 
  InputStream in = con.getInputStream(); 
  bitmap = BitmapFactory.decodeStream(in); 
  in.close(); 
 } catch (MalformedURLException e) 
 { 
  e.printStackTrace(); 
 } catch (IOException e) 
 { 
  e.printStackTrace(); 
 } 
 return bitmap; 
}

問(wèn)題2解決方案:

很容易想到開(kāi)啟一個(gè)定時(shí)器,每隔多久執(zhí)行一次。

還有一種方案就是開(kāi)一個(gè)線程,在while死循環(huán)里面用一個(gè)sleep睡一會(huì)兒。

保存獲取到的圖片解決方法:

保存圖片,自然就涉及到SD卡上文件讀寫(xiě)操作,這里是將Bitmap直接寫(xiě)入文件。聯(lián)想到肯定要用到流,想到這就好辦事了,不過(guò)還需要了解到BitmapFactory類(lèi)的強(qiáng)大之處,這里展示了用系統(tǒng)時(shí)間為保存文件名稱(chēng)的實(shí)現(xiàn)過(guò)程,有一個(gè)好處就是可以任意保存,無(wú)需考慮覆蓋和越界問(wèn)題。

public void savePicture(Bitmap bitmap) 
{ 
 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
 { 
 try 
 { 
 File sdcardDir = Environment 
 .getExternalStorageDirectory(); 
 Time t = new Time(); 
 t.setToNow();
 String filename = sdcardDir.getCanonicalPath() 
 + "/DCIM/camera" 
 + String.format( 
 "/ReeCam%04d%02d%02d%02d%02d%02d.jpg", 
 t.year, t.month + 1, t.monthDay, 
 t.hour, t.minute, t.second); 
 File file = new File(filename); 
 FileOutputStream out = new FileOutputStream(file); 
 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
 out.flush(); 
 out.close(); 
 } catch (FileNotFoundException e) 
 { 
 e.printStackTrace(); 
 } catch (IOException e) 
 { 
 e.printStackTrace(); 
 }
 } 
}

注釋?zhuān)哼@里用到的bitmap就是上面生成的bitmap。

看到這個(gè)問(wèn)題就感覺(jué)像是高中時(shí)的綜合題目一樣,將其分解成簡(jiǎn)單的問(wèn)題,將每個(gè)小問(wèn)題解決,那么復(fù)雜問(wèn)題自然就可以解決了。記得前幾天看了篇帖子,主題是“當(dāng)問(wèn)題被分解成更小的問(wèn)題后,所有的問(wèn)題都變得如此簡(jiǎn)單,而且所有的問(wèn)題都能這樣去分解?!焙螢榕H耍褪怯龅綇?fù)雜問(wèn)題時(shí),能保持清晰的思路,分析問(wèn)題的流程,然后將其分解成足夠小的問(wèn)題,一個(gè)個(gè)解決,最后再組合。就如看到一輛小車(chē),零件之多,有點(diǎn)小復(fù)雜吧,然而我們?nèi)缦氯シ纸猓核膫€(gè)輪子和車(chē)殼,然后輪子再分而鋼圈和輪胎皮, 輪胎皮再分解為內(nèi)胎和外胎。然后你要做的事就是找到生產(chǎn)輪胎和鋼圈的廠家購(gòu)買(mǎi)這兩樣組件,然后再利用第三方或者其它工具去組裝成車(chē)輪。這里輪胎和鋼圈相當(dāng)于Java里面類(lèi),第三方或其他組裝工具,就如你的代碼,將它們和發(fā)動(dòng)機(jī)組裝再一起就實(shí)現(xiàn)了車(chē)子跑到的功能。學(xué)會(huì)分解思維,最常用的就是二分法,當(dāng)然還得具體問(wèn)題具體分析。

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論