android.os.NetworkOnMainThreadException異常處理

第一種: java

public void onCreate(Bundle savedInstanceState) {
        
        // 詳見StrictMode文檔
       StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()   // or .detectAll() for all detectable problems
                .penaltyLog()
                .build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects()
                .detectLeakedClosableObjects()
                .penaltyLog()
                .penaltyDeath()
                .build());
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        InitDialog();
    }



在android 2.3上設計的下載程序,在android 4.0上運行時報android.os.NetworkOnMainThreadException異常,原來在4.0中,訪問網絡不能在主程序中進行,有兩個方法能夠解決,一個是在主程序中增長:如上 (我是在使用ftpClient.connect(string, int)時出錯)。 android

另一種方法是啓動線程執行下載任務: 網絡

public class LoginActivity extends Activity implements SinaMcroBlog {

	private ImageView imgHead;
	private Handler handler=new Handler(){

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				imgHead.setImageBitmap((Bitmap)msg.obj);
				break;
			default:
				break;
			}
		}
	};
	Runnable downloadRun = new Runnable(){
		@Override        
		public void run() {            
			URL url;
            Bitmap bitmap = null;
            try {
                    url = new URL("http://tp1.sinaimg.cn/2118986604/180/5633348097/1");
                    InputStream is = url.openConnection().getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(is);
                    bitmap = BitmapFactory.decodeStream(bis);
                    bis.close();
            } catch (MalformedURLException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            }
            handler.obtainMessage(1,bitmap).sendToTarget();
          //Bitmap bitmap = getBitmapFromUrl("http://tp1.sinaimg.cn/2118986604/50/5633348097/1");
			//imgHead.setImageBitmap(bitmap);
			//imgHead.invalidate();
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_login);
		imgHead=(ImageView) this.findViewById(R.id.img_head);
		try {
			new Thread(downloadRun).start();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
相關文章
相關標籤/搜索