android.os.NetworkOnMainThreadException 异常处理

原创 2013年12月03日 11:05:51

使用android4.4,在做一个网络下载时遇到这个问题,经过问了两位大神后发现是这个版本不支持在主线程中使用耗时的线程,比如这种下载,因为,系统会关闭在5秒内无反应的程序,所以就想了把这个操作放到子线程中,在android有个很好的Handler类为处理这个问题

NetworkThread.java类

public class NetworkThread implements Runnable {
    private String url;
    private Handler handler;
    
    //从主线程中把需要的参数传递过来
    public NetworkThread(String url, Handler handler) {
        this.url = url;
        this.handler = handler;
    }

    @Override
    public void run() {
        StringBuffer respData = new StringBuffer();
        try {
            /*
             * 下面是两种网络下载的操作
             */
            URL myUrl = new URL(url);
            URLConnection conn = myUrl.openConnection();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));

            /*HttpClient httpClient = new DefaultHttpClient();
             HttpResponse httpRsp= httpClient.execute(new HttpGet(url));
             HttpEntity entity = httpRsp.getEntity();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    entity.getContent()));*/
            String line = reader.readLine();
            while (line != null) {
                respData.append(line);
                line = reader.readLine();
            }
            //得到一个消息对象
            Message msg = Message.obtain();
            //赋值一个变量
            msg.obj = respData;
            //发送这个消息
            handler.sendMessage(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
MainActivity.java

Handler handler = new Handler(){

			@Override
			public void handleMessage(Message msg) {
				System.out.println("执行后的result:" + msg.obj);
			}
		};
		NetworkThread networkThread = new NetworkThread(url, handler);
		new Thread(networkThread).start();

在主线程中启动一个子线程,并用Handler类来处理这个消息。

版权声明:本文为博主原创文章,未经博主欢迎转载,记得加上本文出处哟~~

相关文章推荐

android.os.NetworkOnMainThreadException异常处理

这个异常情况是在访问网络的时候如果你把操作放在了Activity的主线程当中的话就会产生,并且导致访问网络失败。 在Android2.3之后才会有这个问题,主要是为了防止网络操作阻塞UI线程。 pac...

android.os.NetworkOnMainThreadException 异常处理

最近把cocos2dx的项目移植到android以后,考虑到处理

android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理

UI与网络的数据交换,要放到线程里,防止UI线程因为数据加载造成阻塞,可以用asynctask或thread或handler来解决。 在android 4.0上运行时报android.os.Netwo...

android.os.NetworkOnMainThreadException异常

原文:http://geeksun.iteye.com/blog/1447708 在android 2.3上设计的下载程序,在android 4.0上运行时报android.os.NetworkOn...
  • rong_wz
  • rong_wz
  • 2013年05月25日 21:26
  • 889

异常android.os.NetworkOnMainThreadException

大三学生马上就要实习了,最近在研究android

Android 异常 android.os.NetworkOnMainThreadException

最近在实现一个Android下的数据采集的SDK,收集用户使用数据使用HTTP发送到云平台,进行数据分析。但在发送数据时报如下错误: Caused by: android.os.NetworkOnM...

Android 3.0以上 访问WebService 出现 android.os.NetworkOnMainThreadException异常

Android 3.0 访问WebService 出现 android.os.NetworkOnMainThreadException异常 (2011-12-07 12:24:55) 转载▼ ...
  • mcsbary
  • mcsbary
  • 2012年04月25日 17:16
  • 169

android之android.os.NetworkOnMainThreadException异常

android之android.os.NetworkOnMainThreadException异常分析及解决办法。
  • zxnlmj
  • zxnlmj
  • 2014年05月15日 15:31
  • 2994

关于Android之NetworkOnMainThreadException异常的处理

因为从Honeycomb SDK(3.0)开始,google不再允许网络请求(HTTP、Socket)等相关操作直接在Main Thread类中,其实本来就不应该这样做,直接在UI线程进行网络操作,会...

android 异常处理机制

  • 2012年12月16日 21:43
  • 156KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android.os.NetworkOnMainThreadException 异常处理
举报原因:
原因补充:

(最多只允许输入30个字)