[Android]NetworkOnMainThreadException

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧。

解决办法有两个思路,分别是:

第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单)

在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、Handler (推荐使用)
在Runnable中做HTTP请求,不用阻塞UI线程~

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.share_mblog_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("mylog","请求结果-->" + 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);
    }
}
时间: 2024-09-17 04:17:07

[Android]NetworkOnMainThreadException的相关文章

Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式

http://www.cnblogs.com/awenhome/archive/2012/01/04/2311659.html 以前用2.2 访问WebService没有问题,到3.0上访问出现android.os.NetworkOnMainThreadException 找了资料经过实践,解决方法如下: StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWr

networking-出现android.os.NetworkOnMainThreadException异常

问题描述 出现android.os.NetworkOnMainThreadException异常 当我运行我的android工程时,下边的代码中我得到了一个错误 URL url= new URL(urlToRssFeed); SAXParserFactory factory =SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); XMLReader xmlreader=parser.getXMLReade

android.os.NetworkOnMainThreadException

问题描述 android.os.NetworkOnMainThreadException package com.demo.clientdemo; import java.io.IOException;import java.io.InputStream; import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.H

Caused by: android.os.NetworkOnMainThreadException错误解决办法

好久不写Android代码手都生了,找出自己之前写的程序发现跑不了了,也没啥特别的错误提示,就看到一句有用的错误Caused by: android.os.NetworkOnMainThreadException,查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧. 解决办法有两个思路,分别是: 第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单) 在MainActivity文件的setContentView(R.layout

Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法_Android

网络收集的原因如下,以及解决办法: 我补充总结一下: 解决办法一: 在操作网络类(socket连接)的activity的protected void onCreate(Bundle savedInstanceState)函数后面加上下面的代码.在super.onCreate(savedInstanceState);前面加. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().det

Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法

网络收集的原因如下,以及解决办法: 我补充总结一下: 解决办法一: 在操作网络类(socket连接)的activity的protected void onCreate(Bundle savedInstanceState)函数后面加上下面的代码.在super.onCreate(savedInstanceState);前面加. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().det

android 4 0-连接网络异常java.net.SocketTimeoutException

问题描述 连接网络异常java.net.SocketTimeoutException 我用模拟器Android2.3.3版本跑,是可以连接网络获取到数据的,但用真机(Android4.0版本)运行就出现android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) at libcore.io.BlockGuardOs.c

使用 PHP 消息队列实现 Android 与 Web 通信

需求描述很简单:Android 发送数据到 Web 网页上. 系统: Ubuntu 14.04 + apache2 + php5 + Android 4.4 思路是 socket + 消息队列 + 服务器发送事件,下面的讲解步骤为 Android 端,服务器端,前端.重点是在于 PHP 进程间通信. Android 端比较直接,就是一个 socket 程序.需要注意的是,如果直接在活动主线程里面创建 socket 会报一个 android.os.NetworkOnMainThreadExcept

Android中HttpURLConnection抛出异常的解决方法

Http的URL链接, 会发生错误, 主要原因是 在主UI线程中, 使用网络调用(network call), 就抛出NetworkOnMainThreadException异常. 版本: API level 11以上. 可以使用一个简单的线程, 在后台(asynctask)调用程序, 可以避免此情况; 否则 在getResponseCode()函数处, 抛出异常. Android API : http://developer.android.com/reference/android/os/A