美文网首页
Android - base - 持久化技术

Android - base - 持久化技术

作者: no_today | 来源:发表于2017-10-14 21:53 被阅读0次

    Android 中存储数据的三种方式中的前两种

    大纲

    • 持久化技术简介
    • 方式一:文件存储
    • 方式二:SharedPreferences 配置文件存储

    # 持久化技术简介

    持久化技术是指将那些内存中瞬时存在的数据保存到存储设备 (文件,硬盘) 中,保证即使设备 (手机,电脑) 在关机的情况下,数据也不会丢失。
    保存在内存中的数据是处于 瞬时 状态的,关闭程序 or 关机数据就销毁了。
    而保存在存储设备中的数据是处于 持久化 状态的,不把硬盘砸烂数据就不会丢失。

    Android 系统中提供了三种方式用于实现数据持久化功能,及 文件存储
    SharedPreferences 存储以及 数据库存储

    #方式一:文件存储

    文件存储不对存储内容进行任何格式化处理,因而适合存储一些简单的文本数据或二进制数据。

    ##获取流对象

    输出流
    OpenFileOutput(String Filename, int mode):继承自 FileOutputStream
    输入流
    OpenFileInput(String fileName):继承自 FileInputStream

    核心就是利用Context对象提供的两个方法获取到流,再利用Java的各种流来进行读写操作。

    与Java IO操作几乎一致,Android 只要传入文件名即可,路径自动在 /data/data/<package name>/files/ 目录下。

    ##存取数据到文件
    /**
      * MODE_APPEND 追加
      * MODE_PRIVATE 覆盖
      */
    private void writeDate() {
        String data = "Hello Android";
    
        try (FileOutputStream output = openFileOutput(fileName, MODE_PRIVATE);
             BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))) {
            
            writer.write(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    
    private void readDate() {
        String data = "";
        try (FileInputStream input = openFileInput(fileName);
             BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
    
            String data = reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    #方式二:SharedPreferences 配置文件存储

    键值对存储:保存的时候需要提供键和值,取出的时候用键去取值。
    SharedPreferences提供多种不同数据类型的存储方法。存取数据类型不变。

    ##获取 SharedPreferences 对象
    1. Context.getSharedPreferences(String name, int mode)
    /**
      * @ param name 文件名
      * @ param mode 模式 MODE_PRIVATE (只有当前APP可以对该文件进行读写)
      */
    public SharedPreferences getSharedPreferences(String name, int mode)
    
    1. Activity.getPreferences(int mode)
    /**
      * @ param mode 模式 MODE_PRIVATE (只有当前APP可以对该文件进行读写)
      */
    public SharedPreferences getPreferences(int mode)
    

    跟Context的获取方式很相似,但文件名是系统根据当前 活动名 生成的。

    1. PreferenceManager.getDefaultSharedPrefernces(Context context)
    /**
      * @ param context 上下文对象
      */
    public static SharedPreferences getDefaultSharedPreferences(Context context)
    

    静态方法,自动使用当前应用程序的 包名 作为文件名。

    获取到了对象,下面该进行存取操作了。

    ##存取数据到 SharedPreferences 共享的参数

    存储

    1. 调用 SharedPreferences 对象的 edit() 方法获取到 SharedPreferences.Editor 对象。
    2. 向 SheredPreferences.Editor 对象添加数据: putInt()putString()putBoolean() ...
    3. 调用 SheredPreferences.Editor 对象 apply() 方法将添加的数据提交存储。
    // 存储数据
    SharedPreferences sharedPreferences = getSharedPreferences(spName, MODE_PRIVATE);
    SharedPreferences.Editor edit = sharedPreferences.edit();
    edit.putString("userName", "Change");
    edit.apply();
    }
    

    读取

    1. 调用 SheredPreferences 对象的方法读取数据: getInt()getString()
      getBoolean() ...
    SharedPreferences sharedPreferences = getSharedPreferences(spName, MODE_PRIVATE);
    String userName = sharedPreferences.getString("userName", "");
    

    SharedPreferences 类的get...系列方法需要传入两个参数,第一个为键,第二个为键不存在后返回的默认值。


    #总结

    总结一下核心类

    1. 文件存储核心类

    输出流
    OpenFileOutput(String Filename, int mode)
    输入流
    OpenFileInput(String fileName)

    1. 配置文件存储核心类

    获取数据
    SharedPreferences
    存储数据
    SharedPreferences.Editor

    相关文章

      网友评论

          本文标题:Android - base - 持久化技术

          本文链接:https://www.haomeiwen.com/subject/tcytuxtx.html