内部存储 SD卡存储 三级缓存
2019-05-14 21:52
411 查看
内部存储 SD卡存储 三级缓存
内部存储
//可存储多种类型数据 //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写 SharedPreferences sharedPreferences = getSharedPreferences("qq.txt", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("username",s1); editor.putString("password",s2); editor.commit();
存储位置在 data/data/包名/shared_prefs 目录下 随着app的卸载消失
SD卡存储
首先设置权限
代码: 存储位置 mnt/shell/emulated/0 目录下
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file = Environment.getExternalStorageDirectory(); try { //写入数据 FileOutputStream fos = new FileOutputStream(new File(file, "我丢丢")); fos.write("我丢我丢丢".getBytes()); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //读取数据 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file = Environment.getExternalStorageDirectory(); try { FileInputStream fis = new FileInputStream(new File(file, "我丢丢")); byte[] b = new byte[1024]; int read = fis.read(b); String s = new String(b, 0, read); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
三级缓存
先写入三个工具类
别忘了添加权限
public class Http { static public Bitmap downLoadImage(String str) throws IOException { URL url = new URL(str); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = urlConnection.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] b= new byte[1024]; int len = -1; while((len=inputStream.read(b))!=-1){ byteArrayOutputStream.write(b,0,len); } byte[] bytes = byteArrayOutputStream.toByteArray(); Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); return bitmap; } } ```javascript public class LruUtils { //Lrucache存储工具类 //TODO 1:实例化LruCache对象 private LruCache<String,Bitmap> lruCache; private long max=Runtime.getRuntime().maxMemory();//获得手机的最大内存 public LruUtils(){ lruCache=new LruCache<String,Bitmap>((int)max/8){//给内存大小,一般是最大内存的1/8 //重写该方法返回每个对象的大小 @Override protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); } }; } public Bitmap getBitmap(String key){ Log.d("###", String.valueOf(lruCache.get(key))); if(lruCache.get(key)==null){ return null; } return lruCache.get(key); } public void setBitmap(String key, Bitmap bitmap){ lruCache.put(key,bitmap); } }
public class SDcar { public static void setBitmap(String name, Bitmap bitmap){ //获取路径存储图片 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); File file1=new File(file,name); //存储图片:bitmap对象---->SD卡 try { //参数一 图片的格式 参数二 图片质量 0-100 参数三:输出流 bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file1)); } catch (FileNotFoundException e) { e.printStackTrace(); } } } public static Bitmap getBitmap(String name){ //获取路径存储图片 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); File file1=new File(file,name); //读取图片:SD卡-----Bitmap if(!file1.exists()) { return null; } return BitmapFactory.decodeFile(file1.getAbsolutePath()); } return null; } }
实现代码 我们可以设置一个Button和ImageView 简单实现一下:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap aaa = lruUtils.getBitmap("aaa"); if(aaa==null){ Bitmap aaa1 = SDcar.getBitmap("aaa.jpg"); if(aaa1==null){ new Thread(new Runnable() { @Override public void run() { try { Bitmap bitmap = Http.downLoadImage("http://img.zcool.cn/community/01b078574706206ac72525ae0beaed.jpg@2o.jpg"); Log.d("###", String.valueOf(bitmap)); Message obtain = Message.obtain(); obtain.obj=bitmap; handler.sendMessage(obtain); } catch (IOException e) { e.printStackTrace(); } } }).start(); }else { imageView.setImageBitmap(aaa1); lruUtils.setBitmap("aaa",aaa1); } }else { imageView.setImageBitmap(aaa); } } });
相关文章推荐
- android 获取手机SD卡和手机的内部存储
- 判断是否存在SD卡 如果存在 直接获取SD卡的路径 否则 获取内部存储的路径
- 数据存储详解(二)---->File存储:内部存储 -Cache和外部存储-SD卡
- 内部及外部SD卡存储空间存储
- Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储?若无SD卡,就用内部。
- Android-如何将用户设置进行保存?(内部存储、SD卡,用类作为媒介)
- 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)
- Android_获取sd卡空间、手机内部存储空间
- 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)
- android 存储 内部存储 外部存储 SD卡
- 利用文件io流的方式存储(存到内部与存到SD卡)
- Android中获取文件存储位置(内部存储或者扩展SD卡)
- android 6.0sd卡内部存储 & 外部存储
- Android写入内部存储和sd卡
- 从头学android_内部存储空间和sd卡文件读写操作
- 内部存储空间 手机存储空间 sd卡
- Android手机数据读写方法(内部存储、SD卡,网络加载,包内文件读取)
- Android 内部存储(外置SD卡)和扩展存储卡(TF卡)路径的获取
- Android数据存储:获取网络图片把图片保存到SD卡中并从SDk卡中读取(通过Bitmap方法)
- 跟着源码看ArrayList、LinkedList、HashMap、HashSet的内部存储机制