您的位置:首页 > 移动开发 > Android开发

解决android程序中出现android.os.NetworkOnMainThreadException

2012-08-28 21:04 786 查看
今天在写了一个android小程序,结果在我的虚拟机中运行得好好的,结果下到平板中,居然运行出错,显示:

android.os.NetworkOnMainThreadException

后来,百度了一下,发现原来是我建的工程是android 2.3的, 而我的平板是android4.0的,所以会出现上述错误!

正确解决方法:

在 public void onCreate(Bundle savedInstanceState) {}

中加入

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork() // or .detectAll() for all detectable problems

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

即上述变为:

public void onCreate(Bundle savedInstanceState)

{

/*

* 以下一段为android3.0以上版本使用,具体为什么,我也不懂

*/

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork() // or .detectAll() for all detectable problems

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

.......

}

然后,加入时肯定会报错的,因为没有引入头文件,引入头文件后,保存代码。

问题又来了,保存时没错,但是我点运行时,程序又报错了,说我源文件代码有错,接着在

public void onCreate(Bundle savedInstanceState)

{

/*

* 以下一段为android3.0以上版本使用,具体为什么,我也不懂

*/

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork() // or .detectAll() for all detectable problems

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

.......

}

上加入 @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi", "NewApi" })后,



@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi", "NewApi" })

public void onCreate(Bundle savedInstanceState)

{

/*

* 以下一段为android3.0以上版本使用,具体为什么,我也不懂

*/

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork() // or .detectAll() for all detectable problems

.penaltyLog()

.build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

.......

}

程序终于OK了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: