在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

wemall app中基于Java获取和保存图片的代码

2016-12-20 13:12| 发布者: zhangjf| 查看: 440| 评论: 0

摘要: wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。分享其中关于 保存正在下载的图片URL集合和图片三种获取方式管理者,网络URL获取、内存缓 ...
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。分享其中关于 保存正在下载的图片URL集合和图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取的代码供技术员学习参考使用。

  1. package com.inuoer.util;

  2. import java.lang.ref.SoftReference;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Map;
  6. import java.util.concurrent.ExecutorService;
  7. import java.util.concurrent.Executors;

  8. import android.content.Context;
  9. import android.graphics.Bitmap;
  10. import android.os.Handler;

  11. public class AsyncImageLoader {
  12.         // 保存正在下载的图片URL集合,避免重复下载用
  13.         private static HashSet<String> sDownloadingSet;
  14.         // 软引用内存缓存
  15.         private static Map<String, SoftReference<Bitmap>> sImageCache;
  16.         // 图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取
  17.         private static LoaderImpl impl;
  18.         // 线程池相关
  19.         private static ExecutorService sExecutorService;

  20.         // 通知UI线程图片获取ok时使用
  21.         private Handler handler;

  22.         /**
  23.          * 异步加载图片完毕的回调接口
  24.          */
  25.         public interface ImageCallback {
  26.                 /**
  27.                  * 回调函数
  28.                  *
  29.                  * @param bitmap
  30.                  *            : may be null!
  31.                  * @param imageUrl
  32.                  */
  33.                 public void onImageLoaded(Bitmap bitmap, String imageUrl);
  34.         }

  35.         static {
  36.                 sDownloadingSet = new HashSet<String>();
  37.                 sImageCache = new HashMap<String, SoftReference<Bitmap>>();
  38.                 impl = new LoaderImpl(sImageCache);
  39.         }

  40.         public AsyncImageLoader(Context context) {
  41.                 handler = new Handler();
  42.                 startThreadPoolIfNecessary();

  43.                 String defaultDir = context.getCacheDir().getAbsolutePath();
  44.                 setCachedDir(defaultDir);
  45.         }

  46.         /**
  47.          * 是否缓存图片至/data/data/package/cache/目录 默认不缓存
  48.          */
  49.         public void setCache2File(boolean flag) {
  50.                 impl.setCache2File(flag);
  51.         }

  52.         /**
  53.          * 设置缓存路径,setCache2File(true)时有效
  54.          */
  55.         public void setCachedDir(String dir) {
  56.                 impl.setCachedDir(dir);
  57.         }

  58.         /** 开启线程池 */
  59.         public static void startThreadPoolIfNecessary() {
  60.                 if (sExecutorService == null || sExecutorService.isShutdown()
  61.                                 || sExecutorService.isTerminated()) {
  62.                         sExecutorService = Executors.newFixedThreadPool(3);
  63.                         // sExecutorService = Executors.newSingleThreadExecutor();
  64.                 }
  65.         }

  66.         /**
  67.          * 异步下载图片,并缓存到memory中
  68.          *
  69.          * @param url
  70.          * @param callback
  71.          *            see ImageCallback interface
  72.          */
  73.         public void downloadImage(final String url, final ImageCallback callback) {
  74.                 downloadImage(url, true, callback);
  75.         }

  76.         /**
  77.          *
  78.          * @param url
  79.          * @param cache2Memory
  80.          *            是否缓存至memory中
  81.          * @param callback
  82.          */
  83.         public void downloadImage(final String url, final boolean cache2Memory,
  84.                         final ImageCallback callback) {
  85.                 if (sDownloadingSet.contains(url)) {
  86. //                        Log.i("AsyncImageLoader", "###该图片正在下载,不能重复下载!");
  87.                         return;
  88.                 }

  89.                 Bitmap bitmap = impl.getBitmapFromMemory(url);
  90.                 if (bitmap != null) {
  91.                         if (callback != null) {
  92.                                 callback.onImageLoaded(bitmap, url);
  93.                         }
  94.                 } else {
  95.                         // 从网络端下载图片
  96.                         sDownloadingSet.add(url);
  97.                         sExecutorService.submit(new Runnable() {
  98.                                 @Override
  99.                                 public void run() {
  100.                                         final Bitmap bitmap = impl.getBitmapFromUrl(url,
  101.                                                         cache2Memory);
  102.                                         handler.post(new Runnable() {
  103.                                                 @Override
  104.                                                 public void run() {
  105.                                                         if (callback != null)
  106.                                                                 callback.onImageLoaded(bitmap, url);
  107.                                                         sDownloadingSet.remove(url);
  108.                                                 }
  109.                                         });
  110.                                 }
  111.                         });
  112.                 }
  113.         }

  114.         /**
  115.          * 预加载下一张图片,缓存至memory中
  116.          *
  117.          * @param url
  118.          */
  119.         public void preLoadNextImage(final String url) {
  120.                 // 将callback置为空,只将bitmap缓存到memory即可。
  121.                 downloadImage(url, null);
  122.         }

  123. }
复制代码

wemall-mobile详情下载地址:http://www.koahub.com/home/product/56

wemall官网地址:http://www.wemallshop.com

wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统


最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 02:05

Copyright 2015-2025 djqfx

返回顶部