网络获取图片的方法的重写--较简洁(如果手机缓存里面有就从缓存获取)
16lz
2021-01-26
我前面的博客写了网络获取图片的方法(见:《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 ;}
更多相关文章
- 第一章 工欲善其事 必先利其器—Android(安卓)SDK工具(7)
- Android使用ttf字体库替代替图片
- android定位方式
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
- Android读取联系人的姓名及电话号码
- Android(安卓)APP设计加载使用gif动图需要注意的一般性问题
- [置顶] 解析android 流量监测的实现原理
- Android(安卓)API :SMS短信服务处理和获取联系人
- Android:将View的内容映射成Bitmap转图片导出