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线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...
随机推荐
- Objective-C 之优雅的命名(转)
There are only two hard things in Computer Science: cache invalidation and naming things. 在计算机科学中只有两 ...
- whereis命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...
- vs 2012 InstallShield Limited Edition Project 打包windows服务解析
最近项目从vs2005 升级到vs2010后,发现新的vs2010 不再带有原来的安装工程项目,导致以前的安装包不可以使用,查找资料后发现微软从vs2010 版本后不再提供自带的安装工程,尝试着利用 ...
- Java并发编程笔记—基础知识—实用案例
如何正确停止一个线程 1)共享变量的使用 中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在 ...
- 悦动达人 (多维dp)
悦动达人 Description 一个游戏,在屏幕上有5个格子形成一行,每一秒都会有一个格子闪烁,格子闪烁时你需要保证至少有一只手指在格子上面, 现在我们已经知道第i秒时,第xi个格子会闪烁,我们假设 ...
- Unity3d使用蓝牙(bluetooth)开发IOS点对点网络游戏
著作权声明:本文由http://www.cnblogs.com/icker 原创,欢迎转载分享.转载时请保留该声明和作者博客链接,谢谢! 最近使用Unity3d制作的IOS游戏需要加入联网对战功能功能 ...
- poj1789 Truck History
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20768 Accepted: 8045 De ...
- Linux 的shell 字符串截取很有用。有八种方法。
一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1 # 号截取,删除左边字符,保留右边字符. echo ${va ...
- [转]Spring的IOC原理[通俗解释一下]
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...
- tcp粘包问题(封包)
tcp粘包分析 http://blog.csdn.net/zhangxinrun/article/details/6721495 解决TCP网络传输“粘包”问题(经典) http: ...