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的更多相关文章
随机推荐
- android数据库(随apk一起发布数据库)
读取数据库+数据库版本更新 注意: a, 将随apk发布的数据库放在android工程下/res/raw路径下. b, 数据库文件存到手机上时,路径在/data/data/你的包名/databases ...
- Flash 导出图片和声音
命令文件 PolarBear_jsfl.zip Flash Professional 编辑器命令,用来导出 flash 库中的图片和声音 使用步骤: 1. 首先下载 PolarBear_jsfl.zi ...
- unity3d教程资源
unity2d教程网 http://learnunity2d.com/2d-shootem-up-tutorial/ 横版射击2d游戏系列教程 http://pixelnest.io/tutorial ...
- CVTE面试经历
CVTE也算一般的公司,很偏,不想说.我重点说一下面试的过程,我面试的C++程序开发工程师. 1.自我介绍自己的基本情况. 2.首先问你了解C++的面向对象么,他有哪些主要内容.对面向对象中的多态性你 ...
- html2canvas 网页截图 下载 上传
利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...
- HTTP 报文总结、外送两本电子书
写在前面的话:喜欢这个比喻:如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹. HTTP是一个应用层协议,研究它的内容的确很枯燥,没啥意思,都是规定好的,我们只需要知道是什么就好了 ...
- POJ1038 - Bugs Integrated, Inc.(状态压缩DP)
题目大意 要求你在N*M大小的主板上嵌入2*3大小的芯片,不能够在损坏的格子放置,问最多能够嵌入多少块芯片? 题解 妈蛋,这道题折腾了好久,黑书上的讲解看了好几遍才稍微有点眉目(智商捉急),接着看了网 ...
- homework-01 博客记录
程序思路: 一维的主要思想是:最大序列的初始项一定是正数,然后在此项基础上向后遍历,当该连续序列的的总和小于或等于0时,就是这个序列的断点,因为若把该序列当做一个数则为负数,一定不是另一个序列的初始. ...
- adb不响应
1.CMD命令窗口输入:adb nodaemon server .然后就会提示你哪个端口被占用了. 2.输入netstat -ano | findstr "5037" .然后会弹出 ...
- [Xcode使用 - 1] 自定义代码块引用
Xcode本身带有编码常用的代码块可供使用,如下图 例如 “if” 这个代码块的定义 调用方法 1.可以直接拖放带编辑区 2.使用快捷键,键入 “if”, Xcode就会出现自动完成的 ...