publicclass TestActivity extends Activity { privatefinalstatic String TAG = "IcsTestActivity"; privatefinalstatic String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/download_test/"; private ImageView mImageView; private Button mBtnSave; private ProgressDialog mSaveDialog = null; private Bitmap mBitmap; private String mFileName; private String mSaveMessage; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mImageView = (ImageView)findViewById(R.id.imgSource); mBtnSave = (Button)findViewById(R.id.btnSave); new Thread(connectNet).start(); // 下載圖片 mBtnSave.setOnClickListener(new Button.OnClickListener(){ publicvoid onClick(View v) { mSaveDialog = ProgressDialog.show(IcsTestActivity.this, "保存圖片", "圖片正在保存中,請稍等...", true); new Thread(saveFileRunnable).start(); } }); } /** * Get image from newwork * @param path The path of image * @return byte[] * @throws Exception */publicbyte[] getImage(String path) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); InputStream inStream = conn.getInputStream(); if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ return readStream(inStream); } returnnull; } /** * Get image from newwork * @param path The path of image * @return InputStream * @throws Exception */public InputStream getImageStream(String path) throws Exception{ URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ return conn.getInputStream(); } returnnull; } /** * Get data from stream * @param inStream * @return byte[] * @throws Exception */publicstaticbyte[] readStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = newbyte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1){ outStream.write(buffer, 0, len); } outStream.close(); inStream.close(); return outStream.toByteArray(); } /** * 保存文件 * @param bm * @param fileName * @throws IOException */publicvoid saveFile(Bitmap bm, String fileName) throws IOException { File dirFile = new File(ALBUM_PATH); if(!dirFile.exists()){ dirFile.mkdir(); } File myCaptureFile = new File(ALBUM_PATH + fileName); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); bos.flush(); bos.close(); } private Runnable saveFileRunnable = new Runnable(){ @Override publicvoid run() { try { saveFile(mBitmap, mFileName); mSaveMessage = "圖片保存成功!"; } catch (IOException e) { mSaveMessage = "圖片保存失敗!"; e.printStackTrace(); } messageHandler.sendMessage(messageHandler.obtainMessage()); } }; private Handler messageHandler = new Handler() { @Override publicvoid handleMessage(Message msg) { mSaveDialog.dismiss(); Log.d(TAG, mSaveMessage); Toast.makeText(IcsTestActivity.this, mSaveMessage, Toast.LENGTH_SHORT).show(); } }; /* * 鏈接網絡 * 因爲在4.0中不容許在主線程中訪問網絡,因此須要在子線程中訪問 */private Runnable connectNet = new Runnable(){ @Override publicvoid run() { try { String filePath = "http://img.my.csdn.net/uploads/201211/21/1353511891_4579.jpg"; mFileName = "test.jpg"; //如下是取得圖片的兩種方法//////////////// 方法1:取得的是byte數組, 從byte數組生成bitmapbyte[] data = getImage(filePath); if(data!=null){ mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// bitmap }else{ Toast.makeText(IcsTestActivity.this, "Image error!", 1).show(); } //////////////////////////////////////////////////////////******** 方法2:取得的是InputStream,直接從InputStream生成bitmap ***********/ mBitmap = BitmapFactory.decodeStream(getImageStream(filePath)); //********************************************************************/ // 發送消息,通知handler在主線程中更新UI connectHanlder.sendEmptyMessage(0); Log.d(TAG, "set image ..."); } catch (Exception e) { Toast.makeText(IcsTestActivity.this,"沒法連接網絡!", 1).show(); e.printStackTrace(); } } }; private Handler connectHanlder = new Handler() { @Override publicvoid handleMessage(Message msg) { Log.d(TAG, "display image"); // 更新UI,顯示圖片if (mBitmap != null) { mImageView.setImageBitmap(mBitmap);// display image } } }; }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/btnSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存圖片"/> <ImageView android:id="@+id/imgSource" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true"/></LinearLayout>