安卓与服务器进行Http通信抛出 NetworkOnMainThreadException 异常处理

原创 2016年08月30日 11:03:24
一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
解决方案有两个,一个是使用StrictMode,二是使用线程来操作网络请求。
在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码
第一种方法:简单暴力,强制使用,代码修改简单(但是非常不推荐)
if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
第二种方法就是我使用的方法也是我要推荐的方法,将请求网络资源的代码使用Thread去操作。在Runnable中做HTTP请求,不用阻塞UI线程。
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.main_view);
    new Thread(runnable).start();
}
 
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Bundle data = msg.getData();
        String val = data.getString("value");
        Log.i(TAG,"请求结果:" + val);
    }
}
 
Runnable runnable = new Runnable(){
    @Override
    public void run() {
        // TODO: http request.
        Message msg = new Message();
        Bundle data = new Bundle();
        data.putString("value","请求结果");
        msg.setData(data);
        handler.sendMessage(msg);
    }
}
上面是比较通用的方法,我的代码:
 new Thread(new Runnable(){
                @Override
                public void run() {
                    cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);
                    imageView.setImageDrawable(cachedImage);
                }
            }).start();

版权声明:本文为博主原创文章,未经博主允许不得转载。

Http和TCP通信流程解析

转自:http://blog.csdn.net/phunxm/article/details/5836034 =============================================...
  • u012398362
  • u012398362
  • 2016年08月10日 15:18
  • 2068

使用java进行http通信

Http通信概述Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制,后者通过URL的查询字符串传递给服务器参数,以明文显示在浏...
  • u013467442
  • u013467442
  • 2016年03月27日 21:25
  • 1980

HTTP通信过程原理

打开火狐浏览器,打开本地服务器。发送登录 分别发送GET和POST请求。发送后,调试如下: 具体数据分析如下: GET请求——> 请求行 GET /login.php?use...
  • u013087513
  • u013087513
  • 2015年10月28日 10:44
  • 1239

http和socket通信的区别

应用层:HTTP协议(基于传输层的TCP协议,主要解决如何包装数据) 传输层: TCP协议(基于网络层的IP协议)、TPC/IP协议(主要解决数据如何在网络中传输) 网络层: IP 协议 soc...
  • salahelx
  • salahelx
  • 2015年06月21日 16:13
  • 6021

Socket通信,TCP/IP和HTTP的理解

IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层。 TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 实际上s...
  • u013123220
  • u013123220
  • 2017年03月01日 20:46
  • 355

完整的HTTP通信步骤(7步)

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤 建立TCP连接  在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连...
  • XinTeng2012
  • XinTeng2012
  • 2014年01月22日 09:46
  • 802

Java中的HTTP通信

使用Http的GET方法读取数据GET方法主要实在建立URL链接后通过URLconnection实例调用getInputStream方法得到数据流,然后进行输出。 在这块,我用到了有道API进行了测...
  • little_nai
  • little_nai
  • 2016年10月24日 16:51
  • 1213

android网络通信之-Http(Android操作HTTP实现与服务器通信)

本示例以Servlet为例,演示Android与Servlet的通信。 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post...
  • gxflh
  • gxflh
  • 2017年02月05日 21:39
  • 1142

java中用Http通信的一个小例子

{CSDN:CODE:httpmesg}
  • B08514
  • B08514
  • 2014年03月10日 20:29
  • 1470

深入理解HTTP协议(转) 浏览器和服务器如何通信(HTTP协议)

1. 基础概念篇 1.1 介绍   HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consorti...
  • u010064842
  • u010064842
  • 2014年07月29日 15:01
  • 3634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓与服务器进行Http通信抛出 NetworkOnMainThreadException 异常处理
举报原因:
原因补充:

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