android開發,加載網絡圖片時 報錯android.os.NetworkOnMainThreadException

在Android 4.0以上,網絡連接不能放在主線程上,不然就會報錯android.os.NetworkOnMainThreadException。但是4.0下版本可以不會報錯。

 在Android4.0以後,會發現,只要是寫在主線程(就是Activity)中的HTTP請求,運行時都會報錯,這是因爲Android在4.0以後爲了防止應用的ANR(Aplication Not Response)異常,Android這個設計是爲了防止網絡請求時間過長而導致界面假死的情況發生。

解決此問題有兩種解決的方法:

1.可以再Activity的onCreate()方法中加入這樣一段代碼,適用於網絡請求數據量很小的話,如下

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
2.啓動一條子線程進行你的網絡請求,推薦使用這種

// Android 4.0 之後不能在主線程中請求HTTP請求
            new Thread(new Runnable(){
                @Override
                public void run() {
                    cachedImage = asyncImageLoader.loadDrawable(imageUrl, position);
                    imageView.setImageDrawable(cachedImage);
                }
            }).start();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章