碰到的狀況是,之前寫的程式在主執行緒上使用HTTP的POST方式和網頁表單溝通,都很正常可執行。

但就在剛剛發現之前寫的程式既然出錯,百思不得其解,錯誤資訊為android.os.NetworkOnMainThreadException

後來詢問了一下G大師得到了結論

Android4.0在網路的部份多了一個新的Exception,叫做android.os.NetworkOnMainThreadException

意思就是說:網路的活動跑在主要執行緒上了,很貼心的告訴你,這樣子你的APP可能會因為網路的活動等待回應太久,而被系統強制關閉(收到ANR)。

 

所以必須改用多執行緒的方式來執行HTTP的POST方式和網頁表單溝通就可以免除這個問題。G大師你的貼心造成我的困擾@@

 

原本在主執行緒上執行的sendMsg(6)<使用handler來執行HTTP的POST方式和網頁表單溝通>,改成用Thread來執行

Thread thread = new Thread(){
      public void run(){
            sendMsg(6);<使用handler來執行HTTP的POST方式和網頁表單溝通>
      }
};
thread.start();

thread + handler.sendMessage

thread + runable

修改後執行上目前都可正常執行,G大師別再亂改了@@

 

[補充]

另一種方式是在主執行緒中加入下面這段也可解決,就不需要修改成採用thread

StrictMode
    .setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
    .detectDiskReads()  
    .detectDiskWrites()  
    .detectNetwork()   // or .detectAll() for all detectable problems  
    .penaltyLog()  
    .build());  
StrictMode
    .setVmPolicy(new StrictMode.VmPolicy.Builder()  
    .detectLeakedSqlLiteObjects()  
    .detectLeakedClosableObjects()  
    .penaltyLog()  
    .penaltyDeath()  
    .build());

創作者介紹

攝即是空

小彬彬 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • 小豬
  • 大大麻煩解答,您所說的在主執行緒上加上StrictMode
    .setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads()
    .detectDiskWrites()
    .detectNetwork() // or .detectAll() for all detectable problems
    .penaltyLog()
    .build());
    請問以程式碼來說是家在哪啊?