我前面的博客写了网络获取图片的方法(见:
《Android中获取网络图片的方法(如果手机缓存里面有就从缓存获取)》),但比较原始,代码比较冗长,想简化一下。另外一篇文章:
《Android中获取网络图片的三种方法》里面的公用获取Drawable对象的方法,是不会缓存到手机里面的,这里就把那个方法(loadImageFromNetwork() )重写一下,达到图片缓存的目的:
// 如果缓存里面有就从缓存获取,否则网络获取图片,返回Drawable对象
public static Drawable loadImageFromNetwork(Context context, String imageUrl)
{
Drawable drawable = null;
if(imageUrl == null )
return null;
String imagePath = "";
String fileName = "";
// 获取url中图片的文件名与后缀
if(imageUrl!=null&&imageUrl.length()!=0){
fileName = imageUrl.substring(imageUrl.lastIndexOf("/")+1);
}
// 图片在手机本地的存放路径,注意:fileName为空的情况
imagePath = context.getCacheDir() + "/" + fileName;
Log.i("test","imagePath = " + imagePath);
File file = new File(context.getCacheDir(),fileName);// 保存文件
Log.i("test","file.toString()=" + file.toString());
if(!file.exists()&&!file.isDirectory())
{
try {
// 可以在这里通过文件名来判断,是否本地有此图片
FileOutputStream fos=new FileOutputStream( file );
InputStream is = new URL(imageUrl).openStream();
int data = is.read();
while(data!=-1){
fos.write(data);
data=is.read();;
}
fos.close();
is.close();
// drawable = Drawable.createFromStream(
// new URL(imageUrl).openStream(), file.toString() ); // (InputStream) new URL(imageUrl).getContent();
drawable = Drawable.createFromPath(file.toString());
Log.i("test", "file.exists()不文件存在,网上下载:" + drawable.toString());
} catch (IOException e) {
Log.d("test", e.getMessage());
}
}else
{
drawable = Drawable.createFromPath(file.toString());
Log.i("test", "file.exists()文件存在,本地获取");
}
if (drawable == null) {
Log.d("test", "null drawable");
} else {
Log.d("test", "not null drawable");
}
return drawable ;
}
分享到:
相关推荐
重载和重写--java
课堂笔记08(静态代码块_继承_对象构造_方法重写_关键字_抽象类)共4页.pdf.zip
D85-群主重写-论文.zip
继承重写SafeKeyGenerator类,做到替换默认加密算法从SHA256到MD5,从而可以通过图片url的md5去查寻已经下载到本地的缓存文件
重写HTML---之多个隐藏域,重写HTML---之多个隐藏域,重写HTML---之多个隐藏域
重写window.alert方法 重写window.alert方法
在activity生命周期方法中调用给方法释放内存和暂停图片加载线程 FinalHttp添加方法如下(目前AjaxCallBack泛型只支持String和file。有时间将会扩展JSONObject,xmlDom,byte[],bitmap等): public HttpClient ...
Asp.Net的URLReWrite的源代码含详细具体的配置方法,在info.doc里。
Java --- 方法参数为接口(子类实现接口中重写后的方法流程图)
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
URL重写指南 - Apache HTTP服务器.mht
JAVA中的方法重写与方法重载的区别,还算挺详细的
RuoYi-Vue-Plus 是重写 RuoYi-Vue 针对 分布式集群与多租户 场景全方位升级(不兼容原框架)
Java --- 接口、抽象类、方法重写
4-+---蓝色是重写的-论文.zip
NULL 博文链接:https://wang-peng1.iteye.com/blog/557564
@Cacheable:将方法的结果缓存起来,下次调用该方法时,如果传入的参数相同,则直接返回缓存中的数据。 @CacheEvict:清除指定方法的缓存数据,可以配置在方法执行前或执行后进行缓存清除。 @CachePut:更新缓存数据...
本文讲述了什么时候重写equals方法和如何重写equals方法。
10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法的重写.zip10.java方法...