首先經過url加載網絡圖片的方法爲:android
public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
可是出現了崩潰,查看日誌,看到報錯異常:NetworkOnMainThreadException;
忽然醒悟過來,就是Android爲了防止在主線程進行超時的操做相似於網絡請求而致使的頁面卡死現象而報異常
那麼有兩種辦法解決:
1.強制執行:
就在OnCreate方法里加上一下代碼:
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
2.第二種方法就是使用Thread去操做。在Runnable中作HTTP請求,不用阻塞UI線程。
在onCreate方法裏:
new Thread(runnable).start;
而後就是:
Runnable runnable = new Runnable() {
@Override
public void run() {
Message msg = new Message();
bitmaps = getBitMBitmap(piclink);
Bundle bundle = new Bundle();
bundle.putParcelable("bitmaps",bitmaps);
msg.setData(bundle);
handler.sendMessage(msg);
}
};
public Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
Bitmap bitmapss = data.getParcelable("bitmaps");
Log.i("請求結果"+bitmapss);
}
};