效果:



代码:

package com.example.android_asynctask_download2;import android.support.v7.app.ActionBarActivity;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends ActionBarActivity {private Button button;private ImageView imageView;private ProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button1);imageView = (ImageView) this.findViewById(R.id.imageView1);dialog = new ProgressDialog(MainActivity.this);dialog.setCancelable(false);// 让dialog不能失去焦点,一直在最上层显示button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 执行异步任务的操作new MyAsynTask().execute("http://c.hiphotos.baidu.com/zhidao/pic/item/730e0cf3d7ca7bcb48f80cb9bc096b63f724a8a1.jpg");}});}/** * 使用异步任务的规则: 1、生命一个集成AsyncTask标注三个参数的类型 2、第一个参数标识要执行的任务通常是网络的路径 * 3、第二个参数表示进度的刻度 4、第三个参数表示任务执行的结果 */public class MyAsynTask extends AsyncTask {// 表示任务执行之前的操作@Overrideprotected void onPreExecute() {super.onPreExecute();dialog.setTitle("进度条");dialog.setMessage("正在加载图片,请稍后...");dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);dialog.show();}// 主要完成耗时操作@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap = null;InputStream inputStream = null; try {URL url = new URL(params[0]);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(3000);connection.setRequestMethod("GET");connection.setDoInput(true);ByteArrayOutputStream outputStream = new ByteArrayOutputStream();if (connection.getResponseCode() == 200) {int file_length = connection.getContentLength();inputStream = connection.getInputStream();int len = 0;byte[] data = new byte[1024];int total_length = 0;while ((len = inputStream.read(data)) != -1) {total_length += len;outputStream.write(data, 0, len);int value = (int) ((total_length / (float) file_length) * 100);publishProgress(value);// 通过publishProgress将进度传递到onProgressUpdate中对进度更新}bitmap = BitmapFactory.decodeByteArray(outputStream.toByteArray(), 0, outputStream.size());}} catch (Exception e) {e.printStackTrace();}finally{if(inputStream!=null)try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}return bitmap;}// 更新进度条操作@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);dialog.setProgress(values[0]);}// 主要更新UI操作@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);imageView.setImageBitmap(result);dialog.dismiss();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}


更多相关文章

  1. Android(安卓)监听锁屏、解锁、开屏 操作
  2. AsyncTask 源码解析
  3. Android(安卓)AlertDialog 绝对位置计算
  4. handle.post 跳到主线程中执行
  5. gradle.properties使用
  6. Kotlin Parameter specified as non-null is null
  7. android调节音频
  8. Android(安卓)应用程序执行Shell命令
  9. Android(安卓)4.1打开相机(自己写的压力测试APK)

随机推荐

  1. android 堆栈调试方法
  2. android 下载程序
  3. Android 调用Gmail发送邮件
  4. android WIFi 连接状态之DetailedState
  5. Android(安卓)- jni - error:More than o
  6. Android:HttpURLConnection使用,Tomcat的S
  7. Android Support Package r7 发布
  8. android apk 安装路径 包名解析 覆盖安装
  9. android 设置linelayout让按钮自动适应屏
  10. Appium+Python移动端(Android)自动化测试环