wemall app商城源码中基于JAVA的Android异步加载图片管理器代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改。本文分享其中关于异步加载图片管理器,供技术员参考学习。
package com.inuoer.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
/**
*
* @author Administrator
* @desc 异步加载图片管理器
*
*/
public class LoaderImpl {
//内存中的软应用缓存
private Map<String, SoftReference<Bitmap>> imageCache;
//是否缓存图片至本地文件
private boolean cache2FileFlag = false;
//缓存目录,默认是/data/data/package/cache/目录
private String cachedDir;
public LoaderImpl(Map<String, SoftReference<Bitmap>> imageCache){
this.imageCache = imageCache;
}
/**
* 是否缓存图片至外部文件
* @param flag
*/
public void setCache2File(boolean flag){
cache2FileFlag = flag;
}
/**
* 设置缓存图片到外部文件的路径
* @param cacheDir
*/
public void setCachedDir(String cacheDir){
this.cachedDir = cacheDir;
}
/**
* 从网络端下载图片
* @param url 网络图片的URL地址
* @param cache2Memory 是否缓存(缓存在内存中)
* @return bitmap 图片bitmap结构
*
*/
public Bitmap getBitmapFromUrl(String url, boolean cache2Memory){
Bitmap bitmap = null;
try{
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection)u.openConnection();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
if(cache2Memory){
//1.缓存bitmap至内存软引用中
imageCache.put(url, new SoftReference<Bitmap>(bitmap));
if(cache2FileFlag){
//2.缓存bitmap至/data/data/packageName/cache/文件夹中
String fileName = getMD5Str(url);
String filePath = this.cachedDir + "/" +fileName;
FileOutputStream fos = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
}
}
is.close();
conn.disconnect();
return bitmap;
}catch(IOException e){
e.printStackTrace();
return null;
}
}
/**
* 从内存缓存中获取bitmap
* @param url
* @return bitmap or null.
*/
public Bitmap getBitmapFromMemory(String url){
Bitmap bitmap = null;
if(imageCache.containsKey(url)){
synchronized(imageCache){
SoftReference<Bitmap> bitmapRef = imageCache.get(url);
if(bitmapRef != null){
bitmap = bitmapRef.get();
return bitmap;
}
}
}
//从外部缓存文件读取
if(cache2FileFlag){
bitmap = getBitmapFromFile(url);
if(bitmap != null)
imageCache.put(url, new SoftReference<Bitmap>(bitmap));
}
return bitmap;
}
/**
* 从外部文件缓存中获取bitmap
* @param url
* @return
*/
private Bitmap getBitmapFromFile(String url){
Bitmap bitmap = null;
String fileName = getMD5Str(url);
if(fileName == null)
return null;
String filePath = cachedDir + "/" + fileName;
try {
FileInputStream fis = new FileInputStream(filePath);
bitmap = BitmapFactory.decodeStream(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
bitmap = null;
}
return bitmap;
}
/**
* MD5 加密
*/
private static String getMD5Str(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
// System.out.println("NoSuchAlgorithmException caught!");
return null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
/**
* MD5 加密
private static String getMD5Str(Object...objects){
StringBuilder stringBuilder=new StringBuilder();
for (Object object : objects) {
stringBuilder.append(object.toString());
}
return getMD5Str(stringBuilder.toString());
}*/
}
原文详情地址:http://git.oschina.net/zzunet/wemall-doraemon/commit/e8f303df5663dc69fe47bb9623222149d40e3956
wemall doraemonAndroid app商城详情地址:http://www.koahub.com/home/product/55
wemall官网地址:http://www.wemallshop.com
wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统

wemall app商城源码中基于JAVA的Android异步加载图片管理器代码的更多相关文章
- wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...
- wemall app商城源码中基于JAVA的绑定和处理fragments和viewpager之间的逻辑关系代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于PHP的通用的树型类代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于PHP的ThinkPHP惯例配置文件代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中android按钮的三种响应事件
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码中android按 ...
- wemall app商城源码中实现带图片和checkbox的listview
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享其中实现带图片和checkbox的listvi ...
- wemall app商城源码中ScrollView中嵌套ListView主要代码
很多时间我们在scorllview中嵌入listview的时候,都只能看到listview显示一行数据,而我们的要求是显示多行,即我们数据的行数, 当ListView的高度设定一定的值时,ListVi ...
- wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...
- wemall app商城源码Android之支付宝通知处理类
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...
随机推荐
- ASP.NET MVC和jQuery DataTable整合
本文包含代码示例说明如何jQuery插件开发者可以集成到ASP.NET MVC应用程序. 下载源代码- 87.4 KB Introduction The jQuery DataTables plug- ...
- HttpSesstionActivationLIstener示例
HttpSesstionActivationLIstener示例: http://www.cnblogs.com/xdp-gacl/p/3969249.html 钝化的session会已session ...
- JSP获取绝对物理地址
session.getServletContext().getRealPath(""); 但是 getRealPath("a"+File.separator); ...
- netty 对 protobuf 协议的解码与包装探究(2)
netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...
- MYSQL:基础—存储过程
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
- W3Cschool学习笔记——CSS3教程
向 div 元素添加圆角: div { border:2px solid; border-radius:25px; -moz-border-radius:25px; /* Old Firefox */ ...
- 【福利大放送】不止是Android,Github超高影响力开源大放送,学习开发必备教科书
一.写在前面 最近项目重构,时间贼多,也没什么时间更新博客,个人的开源项目也是多时没有更新了:github地址,然而没有更新不代表我不在乎,后面一有空还是会继续提交的. 还是来冒个泡,给大家献上一些福 ...
- 为什么Java可以跨平台,而其他语言不行
你好 我是大福 你现在看的是大福笔记 今天复习了Java语言的概述 内容包括Java 语言的历史.语言特点及平台版本 JRE和JDK的区别 这篇文章的主题是总结下对Java语言特点中的跨平台原理. 在 ...
- Robot Framework和Selenium 2 Grid集成指南
1. 环境搭建 A. 所需软件 1. Selenium2Lib 1.0.1 这个特性需要用到Selenium2Lib的最新版本1.0.1,但是这个版本还有一些iframe支持和IE支持的问题需要修改, ...
- javascript之自增自减典型运算(易错)
JavaScript“自增”运算符与表达式 递增运算符(++)是一个一元运算符,该运算符可以将操作数进行递增操作,即每次增加1.递增运算符要求其操作数必须是变量.对象中的某个属性或数组中的某个元素,并 ...