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线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ... 
随机推荐
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
			RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ... 
- Debian普通用户添加sudo权限
			转自:http://chenpeng.info/html/964 刚安装好的Debian默认还没有sudo功能.1.安装sudo# apt-get install sudo2.修改 /etc/sudo ... 
- phpcms下载下来的程序刚安装就报错了
			你服务器设置的索引等级 index.php比index.html的等级高.你输入地址 http://你的域名/index.html试试. ( ! ) Warning: array_keys() exp ... 
- C# 我理解的接口、抽象类、以及事件
			一.摘要 面试中无数次被问及到什么是接口,什么是抽象类,接口和抽象类有什么区别?什么是委托,什么是事件. 请写出猫叫了,老鼠跑了的例子..... 这些东西对于一些初学者来说可能还真的有点搞不懂,对于一 ... 
- tyvj4221 货车漂移
			背景 蒟蒻中学的蒟蒻遇到了一些小问题. 描述 蒟蒻考完noip也就要回家种田了,他老家的田地在s点,可是种子市场在e点,为了购买种子,中途要经过很多城市,这导致快递费非常的贵(因为快到双11了),于是 ... 
- codevs1688 求逆序对
			题目描述 Description 给定一个序列a1,a2,…,an,如果存在i<j并且ai>aj,那么我们称之为逆序对,求逆序对的数目 数据范围:N<=105.Ai<=105. ... 
- [Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
			有输入必有验证.为了防止用户随便输入确保提交数据的合法性,程序不得不在文本输入框(EditText)中增加限制或验证. 关于输入类型有数字.字母.邮箱.电话等形式,这些具体得根据业务来.那么Andro ... 
- NGUI 新版操作教程
			http://www.tasharen.com/forum/index.php?topic=6754 
- [POJ1003]Hangover
			[POJ1003]Hangover 试题描述 How far can you make a stack of cards overhang a table? If you have one card, ... 
- Python 正则表达式_re模块_使用compile加速
			使用compile加速 compile( rule [,flag] ) 将正则规则编译成一个Pattern对象,以供接下来使用. 第一个参数是规则式,第二个参数是规则选项. 返回一个Pattern对象 ... 
