wemall app中基于Java获取和保存图片的代码
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改。分享其中关于 保存正在下载的图片URL集合和图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取的代码供技术员学习参考使用。
package com.inuoer.util;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
public class AsyncImageLoader {
// 保存正在下载的图片URL集合,避免重复下载用
private static HashSet<String> sDownloadingSet;
// 软引用内存缓存
private static Map<String, SoftReference<Bitmap>> sImageCache;
// 图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取
private static LoaderImpl impl;
// 线程池相关
private static ExecutorService sExecutorService;
// 通知UI线程图片获取ok时使用
private Handler handler;
/**
* 异步加载图片完毕的回调接口
*/
public interface ImageCallback {
/**
* 回调函数
*
* @param bitmap
* : may be null!
* @param imageUrl
*/
public void onImageLoaded(Bitmap bitmap, String imageUrl);
}
static {
sDownloadingSet = new HashSet<String>();
sImageCache = new HashMap<String, SoftReference<Bitmap>>();
impl = new LoaderImpl(sImageCache);
}
public AsyncImageLoader(Context context) {
handler = new Handler();
startThreadPoolIfNecessary();
String defaultDir = context.getCacheDir().getAbsolutePath();
setCachedDir(defaultDir);
}
/**
* 是否缓存图片至/data/data/package/cache/目录 默认不缓存
*/
public void setCache2File(boolean flag) {
impl.setCache2File(flag);
}
/**
* 设置缓存路径,setCache2File(true)时有效
*/
public void setCachedDir(String dir) {
impl.setCachedDir(dir);
}
/** 开启线程池 */
public static void startThreadPoolIfNecessary() {
if (sExecutorService == null || sExecutorService.isShutdown()
|| sExecutorService.isTerminated()) {
sExecutorService = Executors.newFixedThreadPool(3);
// sExecutorService = Executors.newSingleThreadExecutor();
}
}
/**
* 异步下载图片,并缓存到memory中
*
* @param url
* @param callback
* see ImageCallback interface
*/
public void downloadImage(final String url, final ImageCallback callback) {
downloadImage(url, true, callback);
}
/**
*
* @param url
* @param cache2Memory
* 是否缓存至memory中
* @param callback
*/
public void downloadImage(final String url, final boolean cache2Memory,
final ImageCallback callback) {
if (sDownloadingSet.contains(url)) {
// Log.i("AsyncImageLoader", "###该图片正在下载,不能重复下载!");
return;
}
Bitmap bitmap = impl.getBitmapFromMemory(url);
if (bitmap != null) {
if (callback != null) {
callback.onImageLoaded(bitmap, url);
}
} else {
// 从网络端下载图片
sDownloadingSet.add(url);
sExecutorService.submit(new Runnable() {
@Override
public void run() {
final Bitmap bitmap = impl.getBitmapFromUrl(url,
cache2Memory);
handler.post(new Runnable() {
@Override
public void run() {
if (callback != null)
callback.onImageLoaded(bitmap, url);
sDownloadingSet.remove(url);
}
});
}
});
}
}
/**
* 预加载下一张图片,缓存至memory中
*
* @param url
*/
public void preLoadNextImage(final String url) {
// 将callback置为空,只将bitmap缓存到memory即可。
downloadImage(url, null);
}
}
wemall-mobile详情下载地址:http://www.koahub.com/home/product/56
wemall官网地址:http://www.wemallshop.com
wemall 开源微商城 ,微信商城,商城源码,三级分销,微生鲜,微水果,微外卖,微订餐---专业的o2o系统

wemall app中基于Java获取和保存图片的代码的更多相关文章
- wemall app商城源码中基于JAVA通过Http请求获取json字符串的代码
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.分享其中关于通过Http请求获取json字符串的代码供 ...
- wemall app商城源码中基于JAVA的Android异步加载图片管理器代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于JAVA的绑定和处理fragments和viewpager之间的逻辑关系代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- wemall app商城源码中基于PHP的ThinkPHP惯例配置文件代码
wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...
- 支付宝APP支付(基于Java实现支付宝APP支付)
贴一下支付核心代码,以供后续参考: 业务层 import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; ...
- 微信APP支付(基于Java实现微信APP支付)
步骤: 导入maven依赖 <!--微信支付--> <dependency> <groupId>com.github.wxpay</groupId> & ...
- Android中通过Java获取Webview加载内容
有时候我们需要在加载webview时,获取加载完成的内容,当然,WebView也是有可能包含javascript.通过以下操作,我们是可以获取到WebView加载的内容. 1.自定义一个内部类,获取W ...
- web中纯java获取配置文件中的数据
/*********获取配置文件,但配置文件中的值改变,不会随着值的改变也获取的参数值改变**********/ /** * 原因是因为,类装载,装载完后,不会再去装载了 * */// I ...
- 【Spring】28、Spring中基于Java的配置@Configuration和@Bean用法.代替xml配置文件
Spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...
随机推荐
- HDU-2060-Snooker
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2060 题意: 给你场上剩下的球数m , 和 a ,b 两名队员目前得分,现在假设a将 所有的球m都打入 ...
- MyBatis中的条件判断单引号双引号的使用
对于字符串判断, <if test="aIn != 'A'" >会出现问题,系统会试图把'A'转成数字,改为 <if test='aIn != "A&q ...
- cookie、session、sessionid的区别
我们都知道银行,银行的收柜台每天要接待客户存款/取款业务,可以有几种方案: 1.凭借柜台职员的记忆,由收柜台职员来为每位顾客办理存款/取款业务,单凭职员的记忆力,要记到每位顾客的相貌,并迅速这个顾客当 ...
- FMS4中的P2P功能
在fms4以前Adobe只允许在stratus中才能使用p2p功能.令人高兴的是,在最新发布的fms4中,p2p功能已经集成进来了,这将给实时视频类的应用带来更高的效率,adobe这次很给力! 为了使 ...
- log4j.appender.stdout.layout.ConversionPattern
http://501565246-qq-com.iteye.com/blog/1991881 http://wenku.baidu.com/link?url=e4Z9v9CY_gwRxHrggzHXx ...
- 分析 OVS 如何实现 vlan 隔离 - 每天5分钟玩转 OpenStack(140)
上一节我们完成了 OVS vlan 环境的搭建,当前拓扑结构如下: cirros-vm1 位于控制节点,属于 vlan100. cirros-vm2 位于计算节点,属于 vlan100. cirros ...
- 如何在Crystal框架项目中内置启动MetaQ服务?
当Crystal框架项目中需要使用消息机制,而项目规模不大.性能要求不高时,可内置启动MetaQ服务器. 分步指南 项目引入crystal-extend-metaq模块,如下: <depende ...
- 微信小程序之快速接入七牛云
小程序为什么要接入云? 目前,开发者在开发小程序过程中,主要遇到以下几个问题: 小程序发布大小超限 微信官方限制小程序的发布代码不能超过 1MB,而在实际开发过程中,一般的小程序难免会有图片等富媒体文 ...
- Hadoop学习笔记-003-CentOS_6.5_64_设置ssh免密码登录
参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...
- C++编程练习(17)----“二叉树非递归遍历的实现“
二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...