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系统