2012-11-29 40 views
0

我在活动入口处添加版本检测。并在onCreate方法中添加以下代码。错误:android.os.NetworkOnMainThreadException

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

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

在此先感谢!

+0

你可以请张贴你的清单,因为它似乎你缺少一些权限? – Flexo

+2

运行未启动。 – njzk2

+0

@Bhaskar请看我的回答它会解决你的问题。 –

回答

2

做网络进程应该是的start()代替的run()

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

而且可能是您没有在清单文件中添加Internet权限

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

你需要使用AsyncTaskHandler with Thread你不能再使用主线程后HONEY COMB

1

您应该致电start()方法。

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

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

0

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

相关问题