在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();