天天看點

【Android開發】解決安卓android.os.NetworkOnMainThreadException解決android socket程式設計出現的Caused by: android.os.NetworkOnMainThreadException錯

本文轉自:http://blog.csdn.net/debutent/article/details/8708127

以前我的socket通信的代碼運作在android2.3.5手機上一點問題沒有,現在入手了小米2s(系統android4.1.1)後,發現出現如下問題,期間server端打開後異常關閉,在logcat中檢視到了caused by: android.os.networkonmainthreadexception錯誤,在http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception找到了答案,要在mainactivity.java的setcontentview(r.layout.activity_main)後加入以下代碼

并在檔案頭加入,import android.os.strictmode

問題解決

對于什麼是strictmode,可以參考http://www.cnblogs.com/zelos/archive/2011/02/27/1966403.html

還有一篇文章解釋的更清晰:

報android.os.networkonmainthreadexception異常,經過查文檔,原來是4.0系統不允許主線程(ui線程)通路網絡,是以導緻了其異常。在4.0之後在主線程裡面執行http請求都會報這個錯,也許是怕http請求時間太長造成程式假死的情況吧。

一:在發起http請求的activity裡面的oncreate函數裡面添加如下代碼:

//詳見strictmode文檔

如果正在做的項目不是android 4.0的是看不到strictmode類的。

二:使用thread、runnable、handler這三個類:

開線程處理關于網絡的事物,然後用handler發送消息來處理更新ui。

自己走了不少彎路。

繼續閱讀