問題描述:java
問題分析:android
形成這種異常的緣由是安卓版本問題(仔細研究錯誤緣由是代碼不符合Android規範),網上搜索發現:android3.0版本開始(具體是否是從這個版本開始的,就不深究咯)就強制程序不能在主線程中訪問網絡,要把訪問網絡放在獨立的線程中。網絡
解決方式:ide
一、想要忽略這些強制策略問題的話,能夠在onCreate()方法裏面加上學習
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()ui
.detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());spa
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()線程
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()code
.penaltyLog().penaltyDeath().build());圖片
二、放在單獨的線程中:(我用的是點擊按鈕查看網絡圖片,學習用)
private Bitmap bitmap = null;//全局變量 (我若是放在局部變量中,會提示:不可變的局部變量不能被賦值,懶省事就放到全局變量中咯)
按鈕監聽器:
private final class ButtonListenerEvent implements OnClickListener{ @Override public void onClick(View v) { final String path = imagePath.getText().toString(); final Handler handler = new Handler(){ public void handleMessage(Message msg){ switch (msg.what) { case 0: imageView.setImageBitmap(bitmap); break; default: break; } } }; new Thread(){ public void run(){ try { byte[] data = ImageService.getImage(path); // 設置圖像的位圖 bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); //處理完髮送一個空消息 handler.sendEmptyMessage(0); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(getApplicationContext(), R.string.error, 1) .show(); } } }.start(); } }
我是安卓新手,若是有不對的地方還請你們多多指導~