Android下载文件常见错误解决方法

最近在学习Mars老师的Android开发课程,仿照http://www.cnblogs.com/Laupaul/archive/2012/02/12/2348293.html的代码来写应用,结果中间出了各种各样的问题,在这里总结一下:

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()里即可。

经过一番折腾,终于出了结果:

目前还是新手,所以出了问题就各种不知所措,经验还是需要慢慢积累的~

时间: 2024-12-27 01:22:14

Android下载文件常见错误解决方法的相关文章

android studio 更新 Gradle错误解决方法(Gradle sync failed)

android studio 更新 Gradle错误解决方法 Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradle Project Compile Error 等等相关的问题 解决这些问题办法是 首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件 内容如下

普元EOS开发积累第一篇(常见错误解决方法) 持续更新

普元启动服务失败的解决方法 当多个人同时使用一个数据库的时候,启动普元控制台会一直停留在rcall,然后显示一个超时的警告,那样就需要修改一下普元的一个定时器配置项. 安装目录下\Primeton\Platform\apps_config\default\config 中的一个user-config.xml文件 将下列代码中高亮字段中的true改为false即可  <module name="Schedule">          <group name="

创建Android项目及常见错误解决

首先打开eclipse,点击右上角有一个这个小按钮,点击java然后OK 因为切换到这个视图来创建android程序更加方便,然后点击 Next Next 这个地方可以修改android应用程序的图标. Next Next Finish,之后就等待一会,鼠标不要动了.如果鼠标去操作其他的地方很容易出现未知的错误. 新建好的android程序经常会有一些这样那样的错误: 1.WARNING: unable to write jarlist cache file 解决办法:http://jingya

maven 常见错误解决方法

1. 最重要的一点,使用国内镜像,比如 oschina.net 的镜像: 2. 错误:Could not resolve artifact org.apache.maven.archetypes:maven-archetype-quickstart:pom:RELEASE eclipse 建立 maven-archetype-quickstart 类型的 maven 项目报上面的错误,原因是没有该 type 对应的 jar 包,又无法下载. 解决方法: 1> 从http://maven.osch

Ubuntu(64位)编译Android源码常见错误解决办法

2013年07月10日 14:47:27 阅读数:1239 错误: /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory make: *** [out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误 1 解决: sudo apt-get install libc6-dev-i386 错误: make: *** [out/h

android studio 更新 Gradle错误解决方法

Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradle Project Compile Error 等等相关的问题 解决这些问题办法是 首先打开android studio项目 找到项目目录gradle\wrapper\gradle-wrapper.properties这个文件 内容如下 #Wed Apr 10 15:27:10 PDT 2013di

从服务器下载文件中文名乱码解决方法

try { string excelName = Request["excelName"].ToString(); //文件路径 string fileName = Request["fileName"].ToString(); //下载的文件名 if(!(string.IsNullOrEmpty(excelName)|| string.IsNullOrEmpty(fileName))) { Response.Charset = "GB2312"

Android camera调用出现错误解决方法

启动不了camera,提示: 03-28 23:43:03.640: E/AndroidRuntime(1542): java.lang.RuntimeException: setParameters failed 03-28 23:43:03.640: E/AndroidRuntime(1542):  at android.hardware.Camera.native_setParameters(Native Method) 03-28 23:43:03.640: E/AndroidRunti

Maven项目常见错误解决方法汇总

issue 1.Java compiler level does not match the version of the installed Java project facet. 或者 One or more constraints have not been satisfied. 或者 Dynamic Web Module 3.1 requires Java 1.7 or newer. 解决办法: 在项目中的pom.xml文件中添加以下配置: 说明:以下是根据你自己使用的jdk版本来配置的