我用模擬器Android2.3.3版本跑,是可以連接網絡獲取到數據的,但用真機(Android4.0版本)運行就出現android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
......
網上說在onCreate()方法裡面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
但我添加之後就出現上面的問題:java.net.SocketTimeoutException: failed to connect to /172.16.58.88 (port 8080) after 5000ms
希望高手能給予指導,謝
Android4.0以後就不能再主線程中進行網絡請求等費時性操作,要不然就會報anr異常,這主要也是從用戶體驗的角度考慮問題的,想象一下,如果你手機
網速比較慢時,這個時候請求了一個網絡數據,在數據沒有返回時,你的界面就不會有任何可供展示的數據,就一直卡在那裡,影響用戶體驗。
new Thread(){
public void run(){
// 做網絡請求操作
}
}.start();
就可以解決問題了。如果需要網絡數據請求後做一些處理,就可以用到handler這個類去編寫代碼。