2012-11-29 42 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中。

相關問題