持久化技术
持久化技术就是将那些瞬时数据储存在手机或者计算机中,这些数据仍不会丢失。Android提供三种方式用于实现数据持久化功能:文件存储、 SharedPreferences、数据库存储
文件存储
文件存储是最基本的存储方式,没有任何格式化。适合一些比较简单的文本数据或二进制数据
将数据存储到文件中
fun svae(inputText:String){
try{
val output = openFileOutput("data",Context.MODE_PRIVATE)// openFileOutput()方法返回一个FileOutputStream对象。
val writer = BufferedWriter(OutputStreamWriter(output))
writer.use{
it.wirter(inputText)
}
}catch(e:IOException){
e.printStackTrace()
}
}
openFileOutput()方法,用于将指定数据存储到指定文件中。这个方法接收两个参数,第一个是文件名(不包含路径)。第二个是文件操作模式,分别为MODE_PRIVATE 、MODE_APPEND,MODE_PRIVATE是指当指定相同的文件名时,写入内容会覆盖,而MODE_APPEND表示若由相同的文件名,则将内容补充,若没有则创建一个文件名。
use函数,他会保证在执行完所有代码后自动将外层的流关掉。这样就不用手动取关闭流了
从文件中读取数据
与存储数据相似,读取数据用到的方法是openFileinput(),与openFileOutput()方法不同的是,它只接收一个参数,即要打开的文件名。
然后在依次创建InputStreamReader,BufferedReader读取内容即可。
private fun load():String{
val content = StringBuilder()
try {
val input = openFileInput("data")
val reader = BufferedReader(InputStreamReader(input))
reader.forEachLine {
content.append(it)
}
}catch (e:Exception)
{
e.printStackTrace()
}
return content.toString()
}
注意这里使用了一个内置函数forEachLine,它可以实现将每一行的内容都回调到lambda表达式中。
SharedPreference
SharedPreference是用键对来存储数据的,比文件存储方便得多。而且支持各自类型的数据。
用SharedPreference存储数据
binding.saveButton.setOnClickListener {
val editor = getSharedPreferences("data",Context.MODE_PRIVATE).edit()
editor.apply{
putString("name","Tom")
putInt("age",28)
putBoolean("married",false)
apply()
}
}
在Context中使用getSharedPreferences,需要接收两个参数,第一个即文件名,第二关是存储模式,目前版本只有一种即PRIVATE,与直接输入0的效果是一样的。
(在Activity中参数则只有操作模式,因为默认文件名是当前的类名)
后便可以调用edit()方法创建一个Editor方法,之后便是我们经常使用的apply内置函数啦。
用SharedPreference读取数据
读取数据会更加方便
val prefs = getSharedPreferences("data",0)
val name = prefs.getString("name","")
val age = prefs.getInt("age",0)
val married = prefs.getBoolean("married",false)
直接获取getSharedPreferences对象后就可以操作了。
getXXX(key,defValue)
key大家都知道,defValue则是默认值,即找不到后会返回的值。