错误:android.os.NetworkOnMainThreadException

时间:2012-11-29 09:02:36

标签: android android-activity

我在活动的入口处添加版本检测。并在onCreate方法中添加以下代码。

new Thread(){
         public void run(){
         try{
         checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.run();

现在它有一个新线程。但为什么它有错误:android 4.0中的android.os.NetworkOnMainThreadException?

提前感谢!

4 个答案:

答案 0 :(得分:2)

应该 start() 而不是 run()

new Thread(){
         public void run()
         {
            try{
            checkToUpdate();
         }
            catch(Exception e) {
            }
         }
            }.start();

可能您没有在清单文件中添加互联网权限

<manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

答案 1 :(得分:1)

您应该调用start()方法。

在当前线程上调用run()方法,而start()方法创建新线程并在新创建的线程上调用run()方法。

在早期的Android版本中,如果您在主(UI)线程上运行了一个长操作,那么只有在Dalvik检测到应用程序几秒钟没有响应之后,您才立即得到异常。现在,如果您尝试在主线程上执行网络通信,则会抛出异常,以便您在开发时轻松找到这些问题。

答案 2 :(得分:0)

您需要使用AsyncTaskHandler with ThreadHONEY COMB

之后您不能再使用主线程进行网络处理

答案 3 :(得分:0)

长时间运行的任务和网络操作不应该放在onCreate()方法上,因为分配一小段时间来完成onCreate()方法(可能是4秒或更短),你将它移动到onResume()方法,如果可能的话,把它放在AsyncTask中。