1.targetSdkVersion版本问题:
出错点:<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
这种情况下的配置httpurlconnection部分会报错,然后将android:targetSdkVersion改成4可以正常运行
使用环境是在文件下载中,
问题解决:
在4.2环境下载必须要开个子线程,把下载功能的代码放到子线程去运行就行了.因为自4.0版本以后都启用了strick mode,这种模式是为了让大家编写出来的程序更规范而设立的.一切下载功能必须在子线程内完成. |
另外自己有点小心得与大家分享:部分童鞋说marsl老师的源码之恩给你在SDK版本10以下运行,这是SDK版本不兼容造成的,可以采用StrictMode模式注明以解决SDK版本不兼容的问题并下载歌词文本文件和下载MP3文件分别放在AsyncTask中执行,并在按键的监听器中调用AsyncTask子类的的execute(Params...)方法,StrictMode模式和AsyncTask的使用方法可参阅相应的API文档。同时也遇到了下载MP3文件时无法得到输入流的问题,原因是虚拟机并没有外部SDCARD,
有人说下载下来的MP3文件有时候文件大小不对,还有声音会卡
关键点:根据chen老师的视频此处每次读取4*1024个字符,但是不同环境下这些字符不一定读满,既:byte buffer[] = new byte [4*1024];参数中 buffer可能只有其中一部分有MP3的数据剩下一部分是空的(这就是声音卡的原因),既然有的时候read不满所以read的次数就会变多,但是buffer的大小是固定的,所以文件就会变大。
大家可以修改一下代码做个测试
int times = 0;
while( fileStream.read(buffer) != -1){
outputStream.write(buffer);
times = times + 1;
}
System.out.println(times);
修改后代码查看运行了多少次,最多的一次我发现是999,比较少的一次应该是670多点。
解决方案:这里要多谢kuboy 童鞋(http://www.marschen.com/bbs/foru ... 05&highlight=18)
有一篇文章说的很好,他修改了部分代码,这样就可以避免以上的情况出现了,代码如下:
int length = 0;
while((length = fileStream.read(buffer)) != -1){
outputStream.write(buffer , 0 ,length);
}
向fileStream中读了多少数据,那就向outputStream中写多少数据,因为每次都这样控制着,所以不会出现文件大小不对的情况了。再次谢谢kuboy 童鞋。
上面的问题是引用别人的博文,觉得楼主分析能力好强大,威武霸气~
感觉好霸气吖,呜呜,还是菜鸟,comeon~