碰到的狀況是,之前寫的程式在主執行緒上使用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());
留言列表