Android使用AsyncTask下载图片并显示进度条功能

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。这篇文章给大家介绍Android使用AsyncTask下载图片并显示进度条功能。

AsyncTask下载图片并显示下载进度,异步类AsyncTask配合进度条,简练!

public class AsyncTaskActivity2 extends Activity {
 private Button btnDown;//图片框
 private ImageView ivImage;//图片URL
 private static String image_path = "http://www.wfu.edu.cn/page/main1406/images/nav2.jpg";
 //进度对话框
 private ProgressDialog dialog;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.asynctask_activity);
  btnDown = (Button) findViewById(R.id.btnDown);
  ivImage = (ImageView) findViewById(R.id.ivSinaImage);
  //新建一个对话框,不显示
  dialog = new ProgressDialog(this);
  dialog.setTitle("提示");
  dialog.setMessage("正在下载,请稍后...");
  dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//带有水平滚动条
  dialog.setCancelable(false);//不能
  //单击按钮后执行AsyncTask,并传入图片URL
  btnDown.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    // 执行异步任务
    new MyTask().execute(image_path);//启动AsyncTask,参数类型为异步类的第一个参数的类型
   }
  });
 }
 //创建一个内部类,用来下载图片
 public class MyTask extends AsyncTask<String, Integer, Bitmap> {
  @Override
  protected void onPreExecute() {//启动异步类后首先运行,可以设置
   super.onPreExecute();
   dialog.show();//显示对话框
  }
   //第二步,一般进行复杂处理
  @Override
  protected Bitmap doInBackground(String... params) {//最重要,复杂处理,后台,接收execute传来的参数
   Bitmap bitmap = null; //二进制图片
   //字节数组输出流
   ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
   InputStream inputStream = null;//字节输入流
   try {
    HttpClient httpClient = new DefaultHttpClient();//创建一个Http客户端
    HttpGet httpGet = new HttpGet(params[0]);//发送请求
    HttpResponse 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 values = (int) ((total_length / (float) file_length) * 100);
      // 发布进度信息
      publishProgress(values);//发布进度,AsyncTask第二个参数类型,触发onProgressUpdate更新进度条
      outputStream.write(data, 0, len);//写入输出流
     }
     byte[] result=outputStream.toByteArray();//将字节数组输出流转换为字节数组
     //生成二进制图片
     bitmap=BitmapFactory.decodeByteArray(result, 0, result.length);
    }
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    try {
     if (inputStream != null) {
      inputStream.close();
     }
    } catch (Exception e2) {
    }
   }
   return bitmap;
  }
  //当有 publishProgress(value)发来的数据时触发,更新UI
  @Override
  protected void onProgressUpdate(Integer... values) {
   super.onProgressUpdate(values);
   // 设置进度对话框的进度值
   dialog.setProgress(values[0]);//更新进度条,运行在UI
  }
  //第四步
  @Override
  protected void onPostExecute(Bitmap result) {//下载结束后,隐藏对话框
   super.onPostExecute(result);
   dialog.dismiss();
   ivImage.setImageBitmap(result); //更新UI,显示图片,运行在UI
  }
 }
} 

以上所述是小编给大家介绍的Android使用AsyncTask下载图片并显示进度条功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-02-19

Android中使用AsyncTask实现下载文件动态更新进度条功能

1. 泛型 AysncTask<Params, Progress, Result> Params:启动任务时传入的参数,通过调用asyncTask.execute(param)方法传入. Progress:后台任务执行的进度,若不用显示进度条,则不需要指定. Result:后台任务结束时返回的结果. 2. 重要方法 doInBackground(Params... params):必须重写的方法,后台任务就在这里执行,会开启一个新的线程.params为启动任务时传入的参数,参数个数不定. on

Android中使用AsyncTask实现文件下载以及进度更新提示

Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handter即可实现.AsyncTask是抽象类.AsyncTask定义了三种泛型类型Params,Progress和Result: Params启动任务执行的输入参数,比如,HTTP请求的URL. Progress后台任务执行的百分比. Result后台执行任务最终返回的结果,比如String.

Android多线程AsyncTask详解

本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有其他的应用程序组件在运行时,Android系统就会为该应用程序组件开辟一个新的线程来执行.默认的情况下,在一个相同Android应用程序当中,其里面的组件都是运行在同一个线程里面的,这个线程我们称之为Main线程.当我们通过某个组件来启动另一个组件的时候,这个时候默认都是在同一个线程当中完成的.当然

Android AsyncTask详解及使用方法

 Android AsyncTask详解及使用方法  简介: AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务. AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 一.如果想自定义一个AsyncTask,可以写一个类,继承AsyncTask. eg: . //第一个参数为doInBackground中传入的类型,第二个为

Android AsyncTask的优缺点详解

1.Asynctask简介 1.1 使用方法简介 Asynctask作为Android的基础之一,怎么使用就不多讲解了,网上到处都是教程,建议查看Android官方API文档:https://developer.android.google.cn/reference/android/os/AsyncTask.html 这里只实现一个小Demo程序,供大家赏玩: 界面: 这个程序其实特别简单,就是两个按钮,点击分别用来测试AysncTask和Handler两种模式的实现,点击后会有相应的Log提示

Android AsyncTask实现异步处理任务的方法详解

Android AsyncTask实现异步处理任务的方法详解 在开发Android应用时必须遵守单线程模型的原则:Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. Android 单线程模型概念详解:http://www.jb51.net/article/112165.htm 在单线程模型中始终要记住两条法则: 不要阻塞UI线程 确保只在UI线程中访问Android UI工具包 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),

详解Android 中AsyncTask 的使用

详解Android 中AsyncTask 的使用 1.首先我们来看看AsyncTask 的介绍:   Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式:其中: Handler 实例向 UI 线程发送消息,完成界面更新, 优点:对整个过程控制的比较精细:         缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确的控制: AsyncTask :比Handler 更轻量级一些,适用于简单的异步处理: 优点:简单 | 快捷 | 过程可控:    

Android带进度条的下载图片示例(AsyncTask异步任务)

为什么要用异步任务? 在Android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗时操作.如果放在主线程中 会造成阻塞 而当阻塞事件过长时 系统会抛出anr异常.所以我们要使用异步任务.android为我们提供了一个封装好的组件asynctask. AsyncTask可以在子线程中更新ui,封装简化了异步操作.适用于简单的异步处理.如果多个后台任务时就要使用Handler了

jQuery带进度条全屏图片轮播特效代码分享

本文实例讲述了jQuery带进度条全屏图片轮播特效.分享给大家供大家参考.具体如下: jQuery实现的带进度条转接全屏图片轮播效果是一款基于jQuery实现的oppo手机官网首页带进度条全屏图片轮播特效代码,实现效果大气,简洁大方 运行效果图:                  -------------------查看效果 下载源码------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. (1)在head区域引入CSS样式: link rel="sty

Android 带进度条的WebView 示例代码

前言 如果不使用系统自带的TitleBar(即Activity被设置@android:style/Theme.NoTitleBar),那就需要自己来写进度条了,这里封装了一个自定义控件和加载网页的公共Activity,方便使用. 正文 一.截图 二.自定义控件 复制代码 /** * 带进度条的WebView * http://www.cnblogs.com/over140/archive/2013/03/07/2947721.html * */ @SuppressWarnings("deprec

Android带进度条的文件上传示例(使用AsyncTask异步任务)

最近项目中要做一个带进度条的上传文件的功能,学习了AsyncTask,使用起来比较方便,将几个方法实现就行,另外做了一个很简单的demo,希望能对大家有帮助,在程序中设好文件路径和服务器IP即可. demo运行截图: AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p),在此方法中实现任务的执行工作,比如联网下载或上传.AsyncTask定义了三种泛型类型Params,Progress和Result. 1.Params 启动任务执行的输入参数,比

PHP+Ajax无刷新带进度条图片上传示例

项目需求:1.PHP+Ajax无刷新带进度条图片上传,2.带进度条.所需插件:jquery.js,jquery.form.js. 最近在做一个手机web项目,需要用到Ajax上传功图片能,项目要求PHP无刷新上传图片,并且要带进度条,下面就来讲一下我的实现方法,先看效果图 本示例需要使用的是jquery.js,jquery.form.js,demo里面包含有,你可以在文章下方进行下载. 第一步,建立前端页面index.html 此段是前端展示内容,这里需要说明的是由于input:file标签显示

Android编程开发实现带进度条和百分比的多线程下载

本文实例讲述了Android编程开发实现带进度条和百分比的多线程下载.分享给大家供大家参考,具体如下: 继上一篇<java多线程下载实例详解>之后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java: package com.example.downloads; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.H

android多线程断点下载-带进度条和百分比进度显示效果

android多线程断点下载,带进度条和百分比显示,断点下载的临时数据保存到SD卡的文本文档中,建议可以保存到本地数据库中,这样可以提高存取效率,从而提高系统性能. 效果: 打开软件: 下载中: 下载完毕: 附代码如下: package com.yy.multiDownloadOfBreakPoint; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.R

android中实现OkHttp下载文件并带进度条

OkHttp是比较火的网络框架,它支持同步与异步请求,支持缓存,可以拦截,更方便下载大文件与上传文件的操作.下面我们用OkHttp来下载文件并带进度条! 相关资料: 官网地址:http://square.github.io/okhttp/ github源码地址:https://github.com/square/okhttp 一.服务器端简单搭建 可以参考搭建本地Tomcat服务器及相关配置这篇文章. 新建项目OkHttpServer,在WebContent目录下新建downloadfile目录

Android中实现Webview顶部带进度条的方法

写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

Android 实现带进度条的WebView的实例

Android 实现带进度条的WebView的实例 1. WebView加载网页方法 //加载本地资源 loadUrl("file:///android_asset/example.html"); //加载网络资源 loadUrl("http://baidu.com"); 2. 带进度的Drawable文件view_progress_webview <?xml version="1.0" encoding="utf-8"