Android中的数据持久化技术

Android中的数据持久化技术

文件储存

  • 就是用java中的流来对数据进行操作
  • 文件储存是将数据原封不动的存储
  • 一般用于对简单的文本,二进制进行存储
  • 如果你需要用文本储存方式存储比较复杂的数据,那就自己要有格式,方便解析
  • 默认放在内存卡data/data//file/

具体用法

  • Context中提供了openFileOutput和openFileInput方法,

  • 直接看代码吧

  • 需求:用文件储存的方式储存一段文本,然后用文本储存的方式读出文本

  • 需要注意的一点,在output流没有关闭时,是无法用input流读取output中的数据的

  • 原因就是,只有流关闭后,才会保存数据到储存设备中

    ~~~java
    //文件流,主要将数据原封不动的存储,所以底层还是字节流
    FileOutputStream out;
    FileInputStream in;

      //字符流缓冲区
      BufferedWriter bw=null;
      BufferedReader br=null;
      String data ="This is ma data";
    
      try{
          //获取文件流,第一个参数是文件名,第二个是操作模式
          //MODE_PRIVATE:同名文件覆盖,表示只有当前应用可以读,可以理解为文件内容是private的无法访问,
          // 就不能追加,所以就直接覆盖
          //MODE_APPEND:由权限名可知,append应用到结尾,意思是有同名文件
          //就在结尾追加
          out=openFileOutput("data",MODE_APPEND);
    
          //将文件流传到转换流中,再用转换流将二进制流转换成字符流
          //因为这里存储的都是字符,所以转换后用带有字符缓冲区的流来操作
          bw=new BufferedWriter(new OutputStreamWriter(out));
          bw.write(data);
      }catch (IOException e){
          e.printStackTrace();
      }finally {//一定会执行的代码块
              try{
                  if(bw!=null) //记得关闭流
                      bw.close();
              }catch (IOException e){
                  e.printStackTrace();
              }
      }
    
      //读
      try{
          in=openFileInput("data");
          br=new BufferedReader(new InputStreamReader(in));
    
          String line="";
          StringBuffer sb=new StringBuffer();
    
          while((line=br.readLine())!=null){
              sb.append(line);
          }
    
          Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
      }catch (IOException e){
          e.printStackTrace();
      }finally {
          if(br!=null)
              try {
                  br.close();
              }catch (IOException e){
                  e.printStackTrace();
              }
      }
    

    }
    ~~~

SharedPreferences储存方案

  • SharedPreferences是一种以xml格式,以键值对的形式存储数据的存储方案
  • 这方案支持的数据形式很多,比如整型,布尔型,字符型,意思是你存的是什么类型,取出来也是什么类型
  • 默认放在内存卡data/data//shared_prefs/

具体用法

  • 存数据
  • 获取SharedPreferences实例

    ~~~java
    //一共有3种方法

    //调用Activity的方法
    //这种方法只接收一个参数,设置权限,目前也只有一种权限
    //该方法会自动将文件以活动名称命名
    SharedPreferences sp=getPreferences(MODE_PRIVATE);

    //调用Context方法
    //接收两个参数,文件名,权限
    SharedPreferences sp=getSharedPreferences(“data”,MODE_PRIVATE);

    //调用PreferencesManager类的静态方法,传入Context
    SharedPreferences sp=PreferenceManager.getDefaultSharedPreferences(this);
    ~~~

  • 获取Editor,添加数据,保存数据

    ~java
    SharedPreferences.Editor e;
    e= sp.edit();//获取实例
    e.putBoolean("check",true); e.putString("account","jj";
    e.putString("password","fd");
    e.apply();//将数据保存
    ~

  • 取数据

    • 用SharedPreferences实例直接通过键取值

    ~java
    sp.getString("account","");//第二个参数是没有取到值后的默认值
    ~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android数据存储是一种将数据存储在设备上的技术,以便应用程序可以使用它们,无论它们是否在运行时。这使得应用程序可以使用一些简单且安全的存储方法,而无需直接与设备存储硬件进行交互。Android提供了几种不同的数据存储选项,包括: 1. **Shared Preferences**:这是最基本的数据存储方式,它允许应用程序存储和检索键值对数据。这对于小型数据存储需求非常有用,因为它们是本地存储并且对其他应用程序不可见。 2. **Files**:应用程序可以使用文件系统来存储和检索数据。这可以包括文本文件、图像、音频和视频文件等。文件系统存储的数据可以在应用程序关闭后保持持久性。 3. **SQLite**:SQLite是一个轻量级的关系型数据库,它可以在设备上作为嵌入式数据库使用。SQLite提供了对数据的结构化查询支持,因此更适合存储大量数据。 4. **Content Providers**:Content Providers允许应用程序之间共享数据。它们使得跨应用程序访问和共享数据成为可能,这对于构建大型应用程序的跨应用程序功能非常有用。 5. **外部存储(如SD卡)**:Android允许应用程序访问设备的外部存储(如SD卡)。这可以用于存储大文件或大型数据集,但需要注意的是,访问外部存储可能需要额外的权限。 在选择适当的存储选项时,需要考虑数据的类型、大小、持久性和安全性。例如,如果数据只需要在应用程序运行时可用,Shared Preferences可能是一个合适的选择。然而,如果需要存储大量结构化数据或大型文件,那么SQLite或外部存储可能更适合。 此外,对于敏感数据(如用户密码或个人信息),建议使用加密来保护这些数据。在Android,可以使用AES或其他加密算法来实现这一点。 最后,记住在处理存储的数据时遵循最佳实践,例如使用适当的错误处理和日志记录,以确保数据的安全性和完整性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值