Android下载文件常见错误解决方法
2015-01-20 20:13
447 查看
最近在学习Mars老师的Android开发课程,仿照http://www.cnblogs.com/Laupaul/archive/2012/02/12/2348293.html的代码来写应用,结果中间出了各种各样的问题,在这里总结一下:
原因:
造成这样的错误原因是代码不符合Android规范,Android在4.0之前的版本支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。
解决办法:
改用多线程,异步加载的方式:
本地启tomcat,当想让android从本地服务器上下载文件时,url中IP地址写127.0.0.1或localhost在模拟器中无效:
改为本机的IP地址也显示无法连接,终于在网上找到一个非常简便的方式:android把127.0.0.1当作模拟器本机,而把计算机本地IP设为10.0.2.2,所以只需要把需连接本地计算机web服务地址改为:http://10.0.2.2即可。
Android的相关View和控件不是线程安全的,从报错信息可以得知只能由产生View的线程对它做改变,因此将
Manifest里也配置了权限
原因是模拟器的SD卡大小没有设置,在AVD Manager里将模拟器的SD卡size设置一下,再跑就没问题了。
经过一番折腾,终于出了结果:
目前还是新手,所以出了问题就各种不知所措,经验还是需要慢慢积累的~
1. java.lang.NullPointerException
报错,android.os.NetworkOnMainThreadException
异常
原因:urlCon.getInputStream()执行的时候出错导致,得不到
InputStream。这个异常大概意思是在主线程访问网络时出的异常。
造成这样的错误原因是代码不符合Android规范,Android在4.0之前的版本支持在主线程中访问网络,但是在4.0以后对这部分程序进行了优化,也就是说访问网络的代码不能写在主线程中了。
解决办法:
改用多线程,异步加载的方式:
String lrc; Handler handler = new Handler() { public void handleMessage(Message msg) { if(msg.what == 0x123) { System.out.println(lrc); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_download); downloadTxtButton = (Button)findViewById(R.id.downloadTxt); downloadMp3Button = (Button)findViewById(R.id.downloadMp3); textview = (TextView)findViewById(R.id.textview); downloadTxtButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { new Thread() { public void run() { HttpDownloader httpDownloader = new HttpDownloader(); lrc = httpDownloader.download("http://127.0.0.1/android_download/white_black.lrc"); handler.sendEmptyMessage(0x123); textview.setText(lrc); } }.start(); } }); }
2. android从tomcat读取文件出错:connect failed: ECONNREFUSED
本地启tomcat,当想让android从本地服务器上下载文件时,url中IP地址写127.0.0.1或localhost在模拟器中无效:W/System.err(12527): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused)
改为本机的IP地址也显示无法连接,终于在网上找到一个非常简便的方式:android把127.0.0.1当作模拟器本机,而把计算机本地IP设为10.0.2.2,所以只需要把需连接本地计算机web服务地址改为:http://10.0.2.2即可。
3.Only the original thread that created a view hierarchy can touch its
views
报错
Android的相关View和控件不是线程安全的,从报错信息可以得知只能由产生View的线程对它做改变,因此将textview.setText(lrc);放到
handleMessage()里即可。
4. 写文件到SD卡时出错:java.io.IOException: open failed: EACCES (Permission denied)
Manifest里也配置了权限<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
原因是模拟器的SD卡大小没有设置,在AVD Manager里将模拟器的SD卡size设置一下,再跑就没问题了。
经过一番折腾,终于出了结果:
目前还是新手,所以出了问题就各种不知所措,经验还是需要慢慢积累的~
相关文章推荐
- [Android环境搭建错误解决二]下载Android源码时,repo出现错误解决方法
- [置顶] ckeditor 的几种使用方法总结(附演示工程文件,并且解决几个常见错误)
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
- 读取xml文件出现错误的一个解决方法(android)
- Android 源码编译及常见错误及解决方法
- Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
- android学习——android 常见的错误 和 解决方法
- Android笔记 - 常见错误解决方法 | Android common erros and solutions
- android上的微信链接不能下载,拨打电话等在浏览器中常见操作的解决方法
- 对于android文件上传中 java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 的错误解决方法
- ckeditor 的几种使用方法总结(附演示工程文件,并且解决几个常见错误)
- eclipse +android常见错误及解决方法
- proc文件系统模块编程-常见错误及解决方法
- android学习——android 常见的错误 和 解决方法
- Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
- struts2文件下载错误提示的解决方法
- 【android日常错误】Android R.java文件丢失,解决方法
- Eclipse搭建Android开发环境之ADT安装常见错误及解决方法
- 【android日常错误】Android R.java文件丢失,解决方法
- android:从互联网上下载txt文件时出现NetworkOnMainThreadException的解决方法