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>
Test
点赞
收藏