android异步加载图片
import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.util.WeakHashMap;
- import org.apache.http.HttpStatus;
- import com.android.lalala.util.lalalaApplication;
- import android.graphics.Bitmap;
- import android.graphics.Bitmap.CompressFormat;
- import android.graphics.BitmapFactory;
- import android.os.Handler;
- import android.widget.ImageView;
- /**
- * 图片下载与缓存 思路是,先查看内存,后检查SDcard,没有的话联网进行下载。
- */
- public class ImageLoader {
- private ImageView imageView = null;
- private String urlPath = "";
- private WeakHashMap<String, Bitmap> picsHashMap = null;
- private String urlHashCode = "";
- private String filePath = "";
- private Handler handler = null;
- private Bitmap handlerBitmap = null;
- /**
- * 构造器
- *
- * @param imageView
- * imageview对象
- * @param urlPath
- * 下载的url地址
- * @param filePath
- * 缓存文件夹名称
- */
- public ImageLoader(ImageView imageView, String urlPath, String filePath) {
- super();
- this.imageView = imageView;
- this.urlPath = urlPath;
- this.filePath = filePath;
- urlHashCode = String.valueOf(urlPath.hashCode());
- // 从application中获取picHashMap对象
- picsHashMap = lalalaApplication.getInstance().getPicHashMap();
- handler = new Handler();
- new imageLoaderThread().start();
- }
- /**
- * 图片下载线程
- */
- private class imageLoaderThread extends Thread {
- @Override
- public void run() {
- super.run();
- if (readFromRAM()) {
- return;
- }
- if (readFromSDcard()) {
- return;
- }
- httpDownload();
- }
- }
- /**
- * 开始下载
- */
- private void httpDownload() {
- try {
- URL url = new URL(urlPath);
- HttpURLConnection connection = (HttpURLConnection) url
- .openConnection();
- connection.setConnectTimeout(10 * 1000);
- if (connection.getResponseCode() == HttpStatus.SC_OK) {
- InputStream is = connection.getInputStream();
- Bitmap bitmap = BitmapFactory.decodeStream(is);
- setBitmap(bitmap);
- lalalaApplication.getInstance().getPicHashMap()
- .put(urlHashCode, bitmap);
- saveToSDcard(bitmap);
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 将bitmap保存至SD卡上
- *
- * @param bitmap
- * bitmap
- */
- private void saveToSDcard(Bitmap bitmap) {
- try {
- String fileName = filePath + "/" + urlHashCode + ".JPG";
- File file = new File(filePath);
- if (!file.exists()) {
- file.mkdir();
- }
- BufferedOutputStream outputStream = new BufferedOutputStream(
- new FileOutputStream(new File(fileName)));
- bitmap.compress(CompressFormat.JPEG, 100, outputStream);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- /**
- * 从内存中读取bitmap图片数据
- *
- * @return true内存中有数据 false 内存中无数据
- */
- private boolean readFromRAM() {
- if (picsHashMap.containsKey(urlHashCode)) {
- Bitmap bitmap = picsHashMap.get(urlHashCode);
- setBitmap(bitmap);
- return true;
- }
- return false;
- }
- /**
- * 从SD卡读取图片
- *
- * @return trueSDcard中有数据 false SDcard中无数据
- */
- private boolean readFromSDcard() {
- String fileName = filePath + "/" + urlHashCode + ".JPG";
- File file = new File(fileName);
- if (!file.exists()) {
- return false;
- } else {
- Bitmap bitmap = BitmapFactory.decodeFile(fileName);
- picsHashMap.put(urlHashCode, bitmap);
- setBitmap(bitmap);
- return true;
- }
- }
- /**
- * 设置图片
- *
- * @param bitmap
- * 图片
- */
- private void setBitmap(Bitmap bitmap) {
- this.handlerBitmap = bitmap;
- handler.post(new Runnable() {
- @Override
- public void run() {
- imageView.setImageBitmap(handlerBitmap);
- }
- });
- }
- }
android异步加载图片的更多相关文章
- 演化理解 Android 异步加载图片(转)
演化理解 Android 异步加载图片(转)http://www.cnblogs.com/CJzhang/archive/2011/10/20/2218474.html
- 实例演示Android异步加载图片
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...
- 实例演示Android异步加载图片(转)
本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- 演化理解 Android 异步加载图片
原文:http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038738.html#3018499 在学习"Android异步加载图像小结&q ...
- android异步加载图片并缓存到本地实现方法
图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片 在android项目中访问网络图片是非常普遍性的事 ...
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...
- wemall app商城源码中基于JAVA的Android异步加载图片管理器代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- Android之使用Android-AQuery异步加载图片(一)
第一节:转载地址(http://www.cnblogs.com/lee0oo0/archive/2012/10/25/2738299.html) // 必须实现AQuery这个类 AQuery aq ...
随机推荐
- windows下将多个文件里面的内容合并成一个一个文件
如题:例如有多个章节的小说,现在要把他们合并成一个txt文件. 利用windows自带cmd工具: 一.拷贝合并1.将你的txt文档按照顺序分别命名为01.txt 02.txt 03.txt……2.将 ...
- android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法.前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blo ...
- 省选加油>_<
今天没有写题诶……看了看以前的模板……明天就要省选了>_<加油~~ 要不再去打局dota吧>_>
- iOS 开发中的问题
错误提示: Your build settings specify a provisioning profile with the UUID “39642B69-0278-4265-8392-4B28 ...
- Spring.net Could not load type from string value
最近有点懒了啊,都没有按时上来博客园更新下,个人觉得遇到难题的时候在这里留下脚印也亦造福他人,进来 晓镜水月 被项目围的团团转,asp.net MVC项目来的,但是我还是不务正业啊,在弄网络爬虫,这个 ...
- Nginx SPDY Pagespeed模块编译——加速网站载入
在看<Web性能权威指南>的时候,看到了SPDY这货,于是便开始折腾起了这个了,也顺便把pagespeed加了进去. Nginx SPDY 引自百科~~ SPDY(读作“SPeeDY”)是 ...
- .net 类型源码下载地址
原文:http://www.cnblogs.com/ProJKY/p/SSCLI.html 一般场景下,采用 Reflector可以反射出.NET 的部分实现出来,可以拿来参考,但和微软公开的SSCL ...
- Java中List、Set和Map的区别--转载
List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...
- DELPHI 获取本月 的第一天 和 最后一天
USER :DateUtils 使用 StartOfTheMonth 和 EndOfTheMonth 函数获取即可: procedure TForm1.btn1Click(Sender: TObj ...
- HDU4916 Count on the path(树dp??)
这道题的题意其实有点略晦涩,定义f(a,b)为 minimum of vertices not on the path between vertices a and b. 其实它加一个minimum ...