Android_AsyncTask_DownloadImg_progressDIalog
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:maxHeight="300dp"
android:maxWidth="300dp"
android:adjustViewBounds="true"/>
<Button
android:id="@+id/btn_download"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onDownLoadImg"
android:text="点击下载图片"
android:textSize = "20sp"/> </LinearLayout>
main.java
package com.example.day07_downloadimg_prgress; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
/**
*
//弹出进度条对话框基本使用
//创建进度条对话框
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
//设置标题
progressDialog.setTitle("正在下载");
//设置内容
progressDialog.setMessage("下载中");
//设置弹出对话框显示的样式
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//显示
progressDialog.show();
//给进度条设置值,在show()之后设置
progressDialog.setProgress(50);
//隐藏
progressDialog.hide();
*
*
*/
/**注意:需要在清单文件中添加网络权限
* 1.初始化控件,数据
* 2.设置下载点击事件
* 2.1.开启异步任务下载图片
* 1.先显示对话框,进度为0
* 2.开始下载
* 1.获得文件大小
* 2.获得当前下载的总量
* 3.计算当前百分比
* 4.通知对话框更新更改进度(主线程)
* 5.下载完成,返回数据
* 3.下载完成
* 1.关闭对话框
* 2.显示下载成功的图片
* @author my
*
*/
public class MainActivity extends Activity { private ImageView image;
private static final String imgPath = "http://c.hiphotos.baidu.com/image/h%3D200/sign=8cbc53a04ded2e73e3e9812cb700a16d/f7246b600c338744513e9358560fd9f9d72aa01f.jpg"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.image);
}
public void onDownLoadImg(View v){
new MyAsyncTask().execute(imgPath);
}
class MyAsyncTask extends AsyncTask<String, Integer, Bitmap>{
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("正在下载");
progressDialog.setMessage("下载中...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.show(); }
@Override
protected Bitmap doInBackground(String... params) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(params[0]);
HttpResponse response = httpClient.execute(httpGet);
if(200 == response.getStatusLine().getStatusCode()){
//获得实体对象
HttpEntity entity = response.getEntity();
//得到输入流
InputStream is = entity.getContent();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//获得要下载图片的总长度
long contentLength = entity.getContentLength();
//当前下载图片的长度
int currentLength = 0;
byte[] buf = new byte[50];
int len = 0;
while(-1 !=(len = is.read(buf))){
currentLength += len;
//计算当前的百分比
int percent =(int) ((currentLength/(float)contentLength)*100);
//通知调用主线程的方法更新进度,自动调用onProgressUpdate()方法
publishProgress(percent);
//写到流中
baos.write(buf, 0, len);
baos.flush();
}
is.close();
baos.close();
//把字节流转换成字节数组
byte[] byteArray = baos.toByteArray();
//把字节流转换成Bitmap
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
return bitmap;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
//关闭对话框
progressDialog.dismiss();
if(result != null){
image.setImageBitmap(result);
}else{
Toast.makeText(MainActivity.this, "网络错误", 0).show();
} }
//在主线程中执行,参数类型与类定义泛型的第二个参数一致
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//更新进度
progressDialog.setProgress(values[0]);
}
} }
Android_AsyncTask_DownloadImg_progressDIalog的更多相关文章
随机推荐
- MEX文件编写和调试
作者kaien,2010/02/16 以前我写过一篇文章,详细的介绍过MEX的格式,语法,编译,调试等.可惜记不清放在哪里了.而最近又用到MEX编程,所以只能重新温习一番.时间有限,只记下简要流程和注 ...
- Python脚本控制的WebDriver 常用操作 <五> 访问链接
下面将使用webdriver来访问一个web链接 测试用例场景 测试中,经常会点击几个链接来进行操作,所以访问链接是基本的常见操作 Python脚本 from selenium import webd ...
- dynamips虚拟服务:找不到指定设备
刚开始接触dynamips,属于新手, 之前是可以正常使用dynamips的,但不知道什么原因就出现这样的问题 果断重新安装,之后可以正常使用
- JS兼容性处理
百度 - 终端适配API 适合服务器端使用.POST客户端传递的http头信息越多,得到的适配信息越准确.百度返回的数据为: 正确情况: { device_type :/*1:手机2:pc*/ os: ...
- 反编译c#的相关问题
最近硬盘坏掉了,有一个项目没有备份,只好用Exe 文件反编译出来用,查了一下相关的文章用到的工具如下: ILSpy_Master_2.1.0.1603_RTW_Binaries 直接生成时,有些奇怪, ...
- #pragma warning (default : n)
参考链接:http://www.cnblogs.com/JCSU/articles/1996483.html 在VC2013中编译以下win32 C++ 控制台程序,会产生2个告警warnings # ...
- 菜鸟学习HTML5+CSS3(一)
主要内容: 1.新的文档类型声明(DTD) 2.新增的HTML5标签 3.删除的HTML标签 4.重新定义的HTML标签 一.新的文档类型声明(DTD) HTML 5的DTD声明为:<!d ...
- 题目1096:日期差值(a-b=(a-c)-(b-c))
http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...
- usb 驱动
usb 驱动学习总结: usb 采用分层的拓扑结构,金字塔型,最多是7层.usb 是主从结构,主和主或者从和从之间不能交换数据.理论上一个usb主控制器最多可接127个设备,协议规定每个usb设备具有 ...
- 卸载redhat6.5的yum,安装centos6的yum,配置第三方yum源
**redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装其他yum源,再配置其他源.** 本文包括配置本地源及第三方源.第三方源包括:网 ...