第一種: 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(); } } }