Android存储——持久化技术

持久化技术


持久化技术就是将那些瞬时数据储存在手机或者计算机中,这些数据仍不会丢失。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()方法不同的是,它只接收一个参数,即要打开的文件名。
然后在依次创建InputStreamReaderBufferedReader读取内容即可。

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则是默认值,即找不到后会返回的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值