在: http://www.oschina.net/code/snippet_151287_9426上学习grid view,不过做学习代码到过程中碰到一下问题:
1.运行起来之后,APP会异常结束;
2.copy数据到模拟终端到sdcard中;
问题1.运行起应用程序之后,
点击两种模式,都会出现应用程序异常退出到问题。debug发现:
File file=new File(path);
通过path new出来到file是访问是空指针,也就回出现空指针异常。
通过咨询原作者说明,那是访问图片在Sdcard中图片到位置。
参考当前到情况,我并没有在模拟器并没有sdcard卡,所以sdcard也没有任何东西。所以会出现上面到问题。
下面新到问题就出现了:
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了,修正这些问题之后,感觉挺有受收获的。谢谢原作者。
来源:oschina
链接:https://my.oschina.net/u/79403/blog/73426