安卓与服务器进行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();

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

相关文章推荐

Android安卓与服务器通信中文乱码问题(一)

我们在andorid项目中通过get方式向服务器发送请求,其中url参数带有中文,将会产生乱码,乱码产生的原因有两种: 1、  在提交参数时,没有对中文参数进行URL编码 2、  Tomc...

Android中使用Http与服务器进行通信

Http介绍:        www是以Internet作为传输媒介的一个应用系统,www网上基本的传输单位是WEB网页。www的工作是基于客户端/服务器计算模型,由Web浏览器和Web服务器构成的...

Android中使用Json和Xml与服务器进行通信,使用代码发送Get和Post请求,http请求辅助类

1.通过xml数据域服务器通信 一、与服务器通信 类似于浏览器与服务器通信,Android应用也可以与Web服务器通信,比如Android应用可以访问Servlet、JSP、图...

Java异常处理-----抛出处理

抛出处理 定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理。 功能内部不想处理,或者处理不了。就抛出使用throw new Exception(“除数...

【Java笔记】异常处理:捕获和抛出基础

一、Java在处理异常的时候是通过创建异常对象来处理的,我们称抓抛处理; 二、异常的传递(异常链); 三、自定义异常(异常转译);

对于丢失网络之后ssh抛出的 Caused by: java.net.UnknownHostException: struts.apache.org异常处理

Caused by: Unable to load file:/D:/MyEclipse/WorkSpace/shop/WebRoot/WEB-INF/classes/struts.xml - Cla...

安卓与PC使用USB一种Socket通信方案

安卓设备和PC之间有很多种通信方式,比如基于无线网络等等。有的时候我们可能需要一些其他的通信方式。安卓设备和PC之间可以通过使用USB来进行通信。使用USB通信能够比无线通信速度更快,效率更高,这一点...

android.os.NetworkOnMainThreadException 异常处理

错误提示: 04-24 21:02:56.530: E/AndroidRuntime(14609): java.lang.RuntimeException: Unable to start se...

android.os.NetworkOnMainThreadException 异常处理

android.os.NetworkOnMainThreadException 异常处理 博客分类:  android   在android 4.0上运行时报android.o...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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