十二、Android-数据存储之文件和SharedPreferences

91 阅读1分钟

12. 数据存储之文件和SharedPreferences

12.1 文件存储

将数据存储到文件中
    private fun save(text: String) {
        try {
            val output = openFileOutput("data", Context.MODE_PRIVATE)
            val writer = BufferedWriter(OutputStreamWriter(output))
            writer.use {
                it.write(text)
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

可以使用Device File Explorer工具查看保存的文件。

存储地址:/data/data/<packagename>/files/目录。文件名是代码中设置的 data

从文件中读取数据
    private fun load(): String {
        val content = StringBuilder()
        try {
            val input = openFileInput("data")
            val reader = BufferedReader(InputStreamReader(input))
            reader.use {
                reader.forEachLine {
                    content.append(it)
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return content.toString()
    }

12.2 SharedPreferences存储

SharedPreferences存储
            val editor = getSharedPreferences("user", Context.MODE_PRIVATE).edit()
            editor.putString("name", "Tom")
            editor.putInt("age", 28)
            editor.putBoolean("married", false)
            editor.apply()

实现SharedPreferences存储的步骤如下:   

  1. 根据Context获取SharedPreferences对象   
  2. 利用edit()方法获取Editor对象。   
  3. 通过Editor对象存储key-value键值对数据。   
  4. 通过commit()方法提交数据。
SharedPreferences读取
        val prefs = getSharedPreferences(name, Context.MODE_PRIVATE)
        val name = prefs.getString("name", "")
        val age = prefs.getInt("age", 0)
        val married = prefs.getBoolean("married", false)

存储地址:/data/data/<packagename>/shared_prefs/目录中。以代码中 name 名字的xml文件中。

12.3 简化SharedPreferences的用法

implementation 'androidx.core:core-ktx:1.8.0'库中,有一个SharedPreferences的扩展edit

        getSharedPreferences("data", Context.MODE_PRIVATE).edit {
            putString("name", "Tom")
            putInt("age", 110)
        }

只需要关注存放的数据就行。

内部原理,类似下面这个open扩展函数:

fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) {
    val editor = edit()
    editor.block()
    editor.apply()
}