在: http://www.oschina.net/code/snippet_151287_9426上學習grid view,不過作學習代碼到過程當中碰到一下問題:shell
1.運行起來以後,APP會異常結束;eclipse
2.copy數據到模擬終端到sdcard中;學習
問題1.運行起應用程序以後,測試
點擊兩種模式,都會出現應用程序異常退出到問題。debug發現:spa
File file=new File(path);
操作系統
經過path new出來到file是訪問是空指針,也就回出現空指針異常。.net
經過諮詢原做者說明,那是訪問圖片在Sdcard中圖片到位置。debug
參考當前到狀況,我並無在模擬器並無sdcard卡,因此sdcard也沒有任何東西。因此會出現上面到問題。指針
下面新到問題就出現了:code
1-1)若是增長sdcard卡到模擬器;
1-2)如何copy 圖片等信息到模擬到模擬器;
不管是聽MP3音樂或是瀏覽圖片,Android手機的保存媒介就是經常使用的Micro SD存儲卡。若想在Android仿真器播放音樂或者看數位相片,就必須先仿真出SD存儲卡,並讓Android仿真器可以訪問仿真出來的SD存儲卡。Android SDK組件的tools目錄裏,除了emulator這個運行文件外,另外放置mksdcard這個程序,它能夠仿真出您所須要的SD存儲卡空間,例如使用mksdcard指令仿真出1 GB的存儲卡,指令以下:
- mksdcard 1024M sdcard.img
通過一小段的硬盤讀取時間後,就會在Android SDK tools/ 目錄下生成一個文件大小爲1GB的sdcard.img文件,也能夠依照本身的須要更改1 024 MB爲其餘數字,製造出本身所需的存儲卡大小,例如4 096 MB (4 GB) 或8 192 MB (8 GB)。而後咱們以emulator指令啓動Android仿真器時,必須添加-sdcard參數指定該sdcard.img存儲卡文件,就可讓Android仿真器擁有插入SD存儲卡到T-Mobile G1手機的仿真效果。
- emulator -sdcard sdcard.img
3.2.1 adb+push上載文件到SD存儲卡
使用Android仿真器加上-sdcard指令裝入SD存儲卡後,彷佛一切都沒有發生。其實否則,Android是Linux操做系統的一種,它將SD存儲卡掛接(mount)在系統的/sdcard目錄中,咱們要訪問SD存儲卡,是沒法直接在Android emulator的手機中來完成的,Android的仿真器並無資源管理器能夠作通常操做系統上的複製刪除文件動做,一切必須靠adb (Android Debug Bridge) 指令來完成。如今必須開啓另一個終端機窗口,而後運行Android SDK tools目錄底下的adb指令加上push參數,將計算機中的文件複製到剛剛製做好的SD存儲卡圖像檔中,指令以下:
- adb push 001.jpg /sdcard (複製001.jpg文件到 /sdcard 目錄下)
- adb push pictures /sdcard (複製pictures照片目錄到 /sdcard 目錄下)
- adb push mp3 /sdcard (複製mp3音樂目錄到 /sdcard 目錄下)
複製好文件後,您必須運行adb shell指令進入Android系統,而後使用Linux系統的ls與cd指令瀏覽/sdcard存儲卡文件。
- adb shell (Android仿真器啓動命令列模式)
- # cd /sdcard (進入 /sdcard目錄)
- # ls (查看SD存儲卡中的文件)
若是成功的話,則已經將計算機中的文件複製到Android系統的SD存儲卡了。如今使用Android仿真器啓動手機裏的Gallery圖片瀏覽程序是否是已經看到剛剛已經加載的圖片了,或是使用Music音樂播放程序,也能夠直接看到加載的MP3音樂了,如圖3-14所示,而不會再顯示 no SD card了。若是仍是顯示no SD card或是抓不到信息的話,請關掉仿真器,從新運行emulator -sdcard sdcard.img,就能夠正確抓到SD存儲卡內的文件了。
按照上面描述的方法,就能夠把這個APP所須要到圖片都copy到sdcard目錄下面。
因此也就先修改程序中一處: path="/sdcard/"; 把地址寫死了,先驗證功能以後,再說了。
修改以後,從新運行,仍然回出現異常。從eclipse的打印到log中知道,訪問到仍然有空指針的問題。不過問題出在:
Bitmap bm=BitmapFactory.decodeFile(f.getPath(), opt);(bm爲空指針!)
imageMaps.put(i, bm);
還好總算是進步了,發現訪問到其中一個不是圖片的文件的f.getpath(),decode以後bm是NULL。
這裏應該是屬於代碼健壯性到問題。
因此,證據了過濾條件:
String ss = ".jpg"; //測試使用,只關心.jpg格式到文件。
for(int i=0;i<files.length;i++){
File f=files[i];
if (-1 != f.getPath().indexOf(ss))
{
Bitmap bm=BitmapFactory.decodeFile(f.getPath(), opt);
imageMaps.put(i, bm);
}
}
這樣總算OK了,修正這些問題以後,感受挺有受收穫的。謝謝原做者。