AsyncTask下载网络图片
MyTask task = new MyTask(); task.execute(url);
class MyTask extends AsyncTask<String, Integer, Bitmap> {
// 下载前的操作(主)
@Override
protected void onPreExecute() {
// 下载前需要显示进度条
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("正在下载");
dialog.setMessage("请稍候");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 水平进度条对话框
dialog.setMax(100);
dialog.show();
super.onPreExecute();
}
// 下载图片(子)
@Override
protected Bitmap doInBackground(String... params) {
String url = params[0];// 获取url地址
HttpClient httpClient = new DefaultHttpClient(); // HttpClient对象
HttpGet httpGet = new HttpGet(url); // GET请求(url时uri的子类)
try {
HttpResponse response = httpClient.execute(httpGet); // 发送GET请求
// 判断响应的状态码是否为200
if (response.getStatusLine().getStatusCode() == 200) {
// 真正的下载数据(图片)
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent(); // 获得输入流
long length = entity.getContentLength(); // 获取文件的总长度
ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节数组输出流(专用于保存网络上下载的数据)
byte[] buffer = new byte[1024]; // 输入缓冲器
int ret, received = 0; // 接收到多少
// 屌丝的代码
while (true) {
ret = is.read(buffer); // 真正读到多少字节(最后一次读到的值不一定是1024)
if (ret < 0) {
break;
}
// 把buffer的数据先保存到一个靠谱的地方
baos.write(buffer, 0, ret);
received += ret; // 更新当前接收到的长度
int progress = (int) (100 * received / length); // 计算进度值
publishProgress(progress); // 发布最新的进度值
}
// 大神的代码
// while((ret = is.read(buffer)) > 0) {
// baos.write(buffer, 0, ret);
// }
byte[] data = baos.toByteArray(); // 流转字节数组
// 最后的最后,把字节数组转换成图片
return BitmapFactory.decodeByteArray(data, 0, data.length);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // 发送请求(GET POST)
return null;
}
// 发布更新的操作(主)
@Override
protected void onProgressUpdate(Integer... values) {
dialog.setProgress(values[0]);
super.onProgressUpdate(values);
}
// 下载后的操作(主)
@Override
protected void onPostExecute(Bitmap result) {
imageview.setImageBitmap(result);
// 下载后取消进度条
dialog.dismiss();
super.onPostExecute(result);
}
}
AsyncTask下载网络图片的更多相关文章
- Android初学-AsyncTask下载网络图片
AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...
- Android 用AsyncTask下载网络图片并显示百分比
1.添加布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ...
- AsyncTask下载网络图片的简单应用
1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- 使用url下载网络图片以及流介绍
使用url下载网络图片的时候,首先需要建立一个URL对象,然后使用一个输入流获取该URL中的内容.之后使用读取该输入流的内容,使用一个输出流写到本地文件中.最后关闭输入和输出流.下面是一个简单的下载代 ...
- .Net 使用爬虫下载网络图片到本地磁盘
准备: 1.新建控制台项目 2.引用System.Drawing类库 3.安装HtmlAgilityPack 1.5.2.0 4.如果不会XPath语法的话,建议简单看下 代码: static voi ...
- android下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
- java 下载网络图片
java 如何下载网络图片 CreateTime--2017年9月30日11:18:19 Author:Marydon 说明:根据网络URL获取该网页上面所有的img标签并下载符合要求的所有图片 ...
- Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...
随机推荐
- 用JSON-server模拟REST API(一) 安装运行
用JSON-server模拟REST API(一) 安装运行 在开发过程中,前后端不论是否分离,接口多半是滞后于页面开发的.所以建立一个REST风格的API接口,给前端页面提供虚拟的数据,是非常有必要 ...
- ExtJS学习之路第四步:看源码,实战MessageBox
可以通过看MessageBox.js的源码来深入认识,记住它的主要用法.Ext.MessageBox是实用类,用于生成不同风格的消息框,它是Singleton(单例),别名Ext.Msg.注意Mess ...
- matlab怎么定义一个数组
A=[];n=input('n=');%数组的长度for i=1:n fprintf('a%.0f=',i); x=input('');%分别输入各个数的值 A=[A,x];endA就可以得到长度为n ...
- 杭赛.Triangle(数学推导)
Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- Python文件基础
===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...
- Sed替换行和字符shell
1.在某一行后面追加一行 RD=2000sed -i '/ssi_types/ a\limit_req zone=lreq burst='$RD';' /opt/bee.location 2.替换字符 ...
- [Effective JavaScript 笔记]第56条:避免不必要的状态
API有时被归为两类:有状态的和无状态的.无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关.字符串的方法是无状态的.字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法 ...
- python学习之最简单的用户注册及登录验证小程序
文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单 ...
- HTML快速入门3
四.表格 (Table) 1. 表格的基本形式 表由 <table> 开始, </table> 结束,表的内容由 <tr>,<th> 和 <td& ...
- 减小Delphi XE5编译出来的程序体积
默认Delphi XE, XE2, XE3,XE4,XE5, XE6 ... 编译出来的程序体积很大. 一般用两个方法可以很大程度上减少程序体积. 一.在工程中用编译指令禁用RTTI 禁用的方法很简单 ...