前言
持久化技术就是指将内存中的数据保存到存储设备中,内存中的数据是处于瞬时状态的,存储设备中的数据是处于持久状态的。持久化技术提供了一种机制,可以让数据在瞬时状态和持久状态之间进行转换。
Android系统主要提供了三种方式用于简地实现数据持久化功能:文件存储、SharedPreferences存储以及数据库存储。
本文主要讨论SharedPreferences存储。
一、什么是SharedPreferences存储?
SharedPreferences(SP)是一种使用键值对形式来存储数据的方式,在保存一条数据的时候,需要给这条数据提供一个key,这样就可以通过key读取出他的value;SP还有一个比较方便的地方,它支持多种不同的数据类型,如果存入的是整型,那么读取出来也是整型;存入的是字符串,读取出来也是字符串。
二、SharedPreferences
1.SharedPreferences对象
想要使用SP,就需要先获取SharedPreferences对象,Android提供了两种方法来获取SharedPreferences对象
方法一:Context类中的getSharedPreferences() 方法 参数 :
- 文件名称,文件如果不存在会自动创建,存放在
/data/data/<package name>/shared_prefs/ 目录下 - 指定操作模式,默认只有一种MODE_PRIVATE,或传入0,表示只有当前应用程序才可以对这个SP进行读写
方法二:Activity类中的getPreferences() 方法 参数 :指定操作模式,同上。 并且会自动将当前Activity的类名作为SP的文件名
2.将数据存储到SharedPreferences中
得到SP对象之后,就可以向文件中存储数据了,主要有以下三个步骤:
- 调用SP对象的
edit() 方法获取一个SP.Editor对象 - 向SP.Editor对象中添加数据,使用
putString/putBoolean 此类的方法 - 使用
apply() 方法提交数据,完成存储
看看demo吧,新建SharedPreferencesTest项目,修改代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/saveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save Data"/>
</LinearLayout>
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button: Button = findViewById(R.id.saveButton)
button.setOnClickListener {
val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.apply{
putString("pet", "dog")
putString("name", "Cookie")
putInt("age", 3)
putBoolean("cute", true)
apply()
}
}
}
}
需要注意其中editor.apply 中的apply 是Kotlin中的标准函数,不是SP.Editor.apply() 方法.
接下来运行程序,点击Save Data按钮,然后到/data/data/com.example.sharedpreferences/shared_prefs/ 目录下,可以看到生成了一个data.xml文件,点击文件打开,发现保存成功了
3.从SharedPreferences中读取数据
同样的SP还提供了一系列get() 方法,对应SP.Editor 中的put() 方法,get() 方法接收两个参数,第一个是key,第二个是默认值,即如果找不到对应的值会返回此值。
在项目中加入以下代码
<Button
android:id="@+id/restoreButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Restore Data"/>
val restoreButton: Button = findViewById(R.id.restoreButton)
restoreButton.setOnClickListener {
val prefs = getSharedPreferences("data", Context.MODE_PRIVATE)
prefs.apply {
val pet = getString("pet", "cat")
val name = getString("name", "Session")
val age = getInt("age", 0)
val cute = getBoolean("cute", false)
val TAG: String = "MainActivity"
Log.d(TAG, "pet is $pet")
Log.d(TAG, "name is $name")
Log.d(TAG, "age is $age")
Log.d(TAG, "cute is $cute")
}
}
运行后,点击Restore Data按钮,然后观察日志
总结
以上就是SharedPreferences存储相关的内容,学习笔记,记录自己的成长!
|