如何解决安卓网络主线程异常的问题:Caused by: android.os.NetworkOnMainThreadException [duplicate]
2013-03-02 14:41
826 查看
原因:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则:
1. 不要阻塞UI线程
2. 确保只在UI线程中访问Android UI工具包 比如说从网上获取一个网页,在一个TextView中将其源代码显示出来,这种涉及到网络操作的程序一般都是需要开一个线程完成网络访问,但是在获得页面源码后,是不能直接在网络操作线程中调用TextView.setText()的.因为其他线程中是不能直接访问主UI线程成员
。
android提供了几种在其他线程中访问UI线程的方法。
Activity.runOnUiThread( Runnable )
View.post( Runnable )
View.postDelayed( Runnable, long )
Hanlder
这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。
为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现。
两种方法:
1.不要把网络请求的代码写到Android主UI线程中(推荐写到Async Task异步处理类中去)
Don't write network call in Main UI Thread, Use Async Task for that.
2.把下面的代码写到你的主程序文件中“setContentView(***)”之后
Write
below code into your MainActivity file after setContentView(R.layout.activity_main);
代码:
原文:http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception
1. 不要阻塞UI线程
2. 确保只在UI线程中访问Android UI工具包 比如说从网上获取一个网页,在一个TextView中将其源代码显示出来,这种涉及到网络操作的程序一般都是需要开一个线程完成网络访问,但是在获得页面源码后,是不能直接在网络操作线程中调用TextView.setText()的.因为其他线程中是不能直接访问主UI线程成员
。
android提供了几种在其他线程中访问UI线程的方法。
Activity.runOnUiThread( Runnable )
View.post( Runnable )
View.postDelayed( Runnable, long )
Hanlder
这些类或方法同样会使你的代码很复杂很难理解。然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕。
为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现。
两种方法:
1.不要把网络请求的代码写到Android主UI线程中(推荐写到Async Task异步处理类中去)
Don't write network call in Main UI Thread, Use Async Task for that.
2.把下面的代码写到你的主程序文件中“setContentView(***)”之后
Write
below code into your MainActivity file after 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); }
原文:http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception
相关文章推荐
- 问题描述: android.os.NetworkOnMainThreadException异常(不要在主线程访问网络资源)
- android.os.NetworkOnMainThreadException异常如何解决
- Caused by: android.os.NetworkOnMainThreadException错误解决办法
- android.os.NetworkOnMainThreadException异常如何解决
- 手把手教你解决android网络请求问题:android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException异常如何解决
- Caused by: android.os.NetworkOnMainThreadException错误解决办法(强制主线程做网络请求)
- 安卓问题总结( android.os.NetworkOnMainThreadException异常)
- Android之如何解决android.os.NetworkOnMainThreadException的异常
- 安卓报错-->Caused by: android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException异常如何解决
- Android加载网络图片android.os.NetworkOnMainThreadException异常解决方法
- Android Eclipse工程开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决办法
- Caused by: android.os.NetworkOnMainThreadException错误解决办法
- 【转】Caused by: android.os.NetworkOnMainThreadException错误解决办法
- 关于连接网络时抛出“android.os.NetworkOnMainThreadException”异常问题
- android异常:android.os.NetworkOnMainThreadException 解决办法
- Caused by: android.os.NetworkOnMainThreadException
- 关于安卓高版本访问网络出现.NetworkOnMainThreadException异常的问题
- android网络访问异常:android.os.NetworkOnMainThreadException