android.os.NetworkOnMainThreadException 异常处理

使用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类来处理这个消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值