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系统
转载于:https://my.oschina.net/u/3007768/blog/790402
wemall app商城源码中基于JAVA的Android异步加载图片管理器代码相关推荐
- wemall app商城源码Android之支付宝接口公用函数
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之 ...
- wemall app商城源码Android之支付宝通知处理类
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...
- wemall app商城源码Android之支付宝通知处理类 1
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之处 ...
- 使用java concurrent处理异步加载图片功能
转载:http://marshal.easymorse.com/archives/3081 java5开始,增加了concurrent api,用于并发处理.比如起多个线程并发从网络上下载图片,然后在 ...
- 在直播APP系统源码中基于腾讯视频云SDK制作简易版直播回放播放器
在直播App系统中,当主播结束之后,我们需要使用播放器观看直播的一些回放片段,在观看回放的过程中,我们会使用到开始,暂停,控制播放位置,进度监听,全屏等功能,然而腾讯点播并没有提供这些简单的控制功能, ...
- Android中的缓存处理及异步加载图片类的封装
一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...
- java图片异步加载_使用java concurrent处理异步加载图片功能
转载:http://marshal.easymorse.com/archives/3081 java5开始,增加了concurrent api,用于并发处理.比如起多个线程并发从网络上下载图片,然后在 ...
- wemall app商城源码Android之支付宝接口RSA函数
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享支付宝接口RSA函数,RSA签名.验签.解密等 ...
- 百度ssp php源码,百度联盟SSP媒体广告异步加载代码最优解决方案
百度联盟SSP媒体广告异步加载代码最优解决方案 相信很多站长跟我一样,建站之后第一时间就会去做百度.谷歌等联盟广告,原因很简单,就是希望能给自己增加一丢丢的收入,虽然可能几个月才收到100块(百度真小 ...
最新文章
- 海洋工作室——网站建设专家:How to check the SQL statement execute time on SQL Server ?...
- 解决JavaOpenCV的内存问题
- (二)C语言数据类型(2)
- vmware克隆linux虚拟机网卡无法上网的解决办法
- MMORPG大型游戏设计与开发(part5 of net)
- 16 分钟优化 mRNA 疫苗稳定性!百度 AI 算法 LinearDesign 为新冠疫苗研发提速
- 七牛直播云播放鉴权-时间戳防盗链
- 2020新定额及配套招投标评审办法宣贯会成功举办
- 使用计算机录制声音10,win10系统电脑中如何解决录屏时无法录制声音的问题
- 主流手机游戏引擎介绍
- 问卷星投票如何刷投票?【请勿非法使用】
- LeetCode第82场双周赛
- android 卸载残留代码,完全卸载AndroidStudio(示例代码)
- COMSOL和Matlab联合仿真之复合材料填充建模
- BAT用户画像数据浅析
- 常见计算机名词符号读音
- 以OPC PowerTool 连接iFix与KEPWARE
- 学习Linux有哪些工作方向?
- C#扩展(2):Random的扩展
- 56道java基础必“背“面试题(备战2022金三银四)