解决android.os.NetworkOnMainThreadException异常问题

来源:互联网 发布:索尼kdl55r580c装软件 编辑:程序博客网 时间:2024/06/06 18:02

文章源自于:http://www.2cto.com/kf/201402/281526.html

一个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);    }}

上面是比较通用的方法,我的代码:

 

 

// Android 4.0 之后不能在主线程中请求HTTP请求new Thread(new Runnable(){    @Override    public void run() {    cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);imageView.setImageDrawable(cachedImage);    }}).start();


};

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗狗便秘怎么办吃什么 痔疮又痛又痒怎么办 痔疮肉球特别痒怎么办 长了个小痔疮怎么办 产后4天没大便怎么办 7个月孕妇痔疮怎么办 运动完恶心想吐怎么办 跑步后恶心想吐怎么办 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办 怀孕七个月便秘严重怎么办 怀孕两个月便秘严重怎么办 3岁宝宝上火便秘怎么办 7个月的宝宝贫血怎么办 9个月婴儿贫血怎么办 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办