异步操作AsyncTask(二)从网络下载图片(带下载进度数据)

来源:互联网 发布:惠天听书传销 知乎 编辑:程序博客网 时间:2024/06/05 16:27
package com.example.asyntaskproject;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import android.app.Activity;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity {private ImageView imageView;private Button button;//图片的网络地址private String image_path = "http://pic4.nipic.com/20090828/2366808_092035042961_2.jpg";private ProgressDialog dialog ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = (ImageView) findViewById(R.id.imageView1);button = (Button) findViewById(R.id.button1);dialog = new ProgressDialog(this);dialog.setTitle("提示");dialog.setMessage("正在下载,请稍后..");dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.setCancelable(false);//不让屏幕失去焦点,即点其他的地方的时候进度条不消失button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew MyTask().execute(image_path);}});}public class MyTask extends AsyncTask<String, Integer, Bitmap>{@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();dialog.show();}@Override        protected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubsuper.onProgressUpdate(values);dialog.setProgress(values[0]);}@Overrideprotected Bitmap doInBackground(String... params) {// TODO Auto-generated method stubBitmap bitmap = null;//声明一个内存流,用于将他图片读取放到内存缓冲区中ByteArrayOutputStream outputStream = new ByteArrayOutputStream();InputStream inputStream = null;HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet(params[0]);HttpResponse httpResponse;try {httpResponse = httpClient.execute(httpGet);if(httpResponse.getStatusLine().getStatusCode() == 200){inputStream = httpResponse.getEntity().getContent();long file_length = httpResponse.getEntity().getContentLength();int len = 0;byte[] data = new byte[1024];int total_length = 0;while((len = inputStream.read(data)) != -1){total_length += len;//刻度百分比int value = (int)((total_length/(float)file_length)*100);publishProgress(value);outputStream.write(data, 0, len);}byte[] result = outputStream.toByteArray();bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);}}catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(inputStream != null){try {inputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return bitmap;}@Overrideprotected void onPostExecute(Bitmap result) {// TODO Auto-generated method stubsuper.onPostExecute(result);dialog.dismiss();imageView.setImageBitmap(result);}}}

免积分源代码下载

0 0
原创粉丝点击