目录
7.3 SharedPreferences 存储
不同于文件的存储方式,SharedPreferences 是使用键值对的方式来存储数据的。也就是说, 当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences 还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
这样你应该就能明显地感觉到,使用SharedPreferences 进行数据持久化要比使用文件方便很 多,下面我们就来看一下它的具体用法吧。
7.3.1 将数据存储到 SharedPreferences 中
要想使用 SharedPreferences 存储数据,首先需要获取 SharedPreferences 对象。Android 中主要提供了以下两种方法用于得到 SharedPreferences 对象。
01 . Context 类中的 getSharedPreferences() 方法
此方法接收两个参数:第一个参数用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences 文件都是存放在/data/data/<pack age name>/shar ed_pr efs/ 目录下的;第二个参数用于指定操作模式,目前只有默认的 MODE_PRIVATE 这一种模式可选,它和直接传入 0 的效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences 文件进行读写。其他几种操作模式均已被废弃, MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 这两种模式是在Android 4.2 版本中被废弃的,MODE_MULTI_PROCESS模式是在Andr oid 6.0 版本中被废弃的。
02 . Activity类中的 getPreferences() 方法
这个方法和 Context 中的 getSharedPreferences() 方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前 Activity 的类名作为 SharedPreferences 的文件名。
得到了 SharedPreferences 对象之后,就可以开始向 SharedPreferences 文件中存储数据了,主要可以分为3步实现。
(1) 调用 SharedPreferences 对象的 edit() 方法获取一个 SharedPreferences.Editor 对象。
(2) 向 SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用 putBoolean() 方法,添加一个字符串则使用 putString() 方法,以此类推。
(3) 调用 apply() 方法将添加的数据提交,从而完成数据存储操作。
不知不觉中已经将理论知识介绍得挺多了,那我们就赶快通过一个例子来体验一下 SharedPreferences 存储的用法吧。新建一个 SharedPreferencesTest 项目,然后修改activity_main.xml 中的代码,如下所示:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/saveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Save Data"/>
</LinearLayout>
这里我们不做任何复杂的功能,只是简单地放置了一个按钮,用于将一些数据存储到 SharedPreferences 文件当中。然后修改 MainActivity 中的代码,如下所示:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
saveButton.setOnClickListener {
val editor = getSharedPreferences("data",Context.MODE_PRIVATE).edit()
editor.putString("name","Tom")
editor.put