简单易用的安卓SharedPreferences存储(数据存储系列)

语言: CN / TW / HK

theme: channing-cyan

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

本篇主要介绍本人在工作最常用的数据存储方法——haredPreferences存储,即sp存储,该方式存储比较方便,用于存储用户本地持久化数据,使用过程中也出现过一些不好解决的坑,但不可否认,如果需求有一些需要APP本地存储的数据,我还是会首选sp存储,毕竟写起来很容易(工作开发的项目代码已经将其简化封装为工具类,只要写key和set方法与get方法即可调用,所以感觉很方便)。

正篇

SharedPreferences存储概述

该存储方式是使用键值对(key-value)进行存储数据,换而言之,当我们想用其保存一条数据,需要给这条数据提供一个对应的键(key),然后在读取数据的时候就可以通过这个键(key)将相应的值(value)取出。

image.png 该存储方式支持多种不同的数据类型存储:

image.png

image.png 如上面两个图所示,该方法支持以下几种数据类型:\ 1.int(整型)\ 2.long(长整型)\ 3.float(浮点型)\ 4.String(字符串)\ 5.Set<String>(字符串集合)\ 存入以上对应的类型,我们在取出时也会获得同样类型的数据。

使用方法

存储数据

首先,我们看看sp存储的存数据方法:\

1.getSharedPreferences()方法

image.png

image.png 这个方法是Context类提供的,该方法的第一个参数可以用来指定文件名称,名称不存在就会创建一个,Sp存储文件存放地址为/data/data/< package name >/shared_prefs/目录下;它的第二个参数则是用于指定操作模式,不过只有MODE_PRIVATE这个默认模式可用,等于直接传入0,这个模式意思是只有当前程序才可以对这个Sp文件进行读写。

2.getPreferences()方法

这个方法是Activity类中提供的:

image.png 这个方法只有一个参数,即操作模式,而且该方法会将当前的Activity类名直接作为Sp文件名,其他都和getSharedPreferences()方法相似。

使用实例:

布局中我们加一个按钮 XML布局: ```XML

<Button
    android:id="@+id/saveButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/default_a"
    android:text="@string/save_data"/>

然后在Activity中在按钮的点击事件时使用Sp存储存入元素:Kotlin class SharedPreferencesDemo : AppCompatActivity() { lateinit var binding : ActivitySharedPreferencesDemoBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivitySharedPreferencesDemoBinding.inflate(layoutInflater)
    setContentView(binding.root)
    binding.saveButton.setOnClickListener {
        val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
        editor.putString("name", "Tom")
        editor.putInt("age", 18)
        editor.putBoolean("married", false)
        editor.apply()
    }
    //Demo
    val edit = getPreferences(Context.MODE_PRIVATE).edit()
    edit.putLong("id", 5555555)
    edit.apply()
}

} ``` 我们运行程序,然后按一下按钮:

image.png

接着我们就可以在设备文件管理器中找到data.xml的文件:

image.png

image.png 这就表示存下来了。

Sp文件读取数据方法

存储数据的时候我们用了putXXX()的方法,去存储了key-value型数据,所以取数据更为简单,就是直接去对应类型的getXXX()方法传入对应的key即可以取出该类型的数据,当然为了在找不到存储值时有对应的数据获取,我们在getXXX()的第二个参数中传入默认值,如下所示:

image.png Kotlion binding.restoreButton.setOnClickListener { val prefs = getSharedPreferences("data", Context.MODE_PRIVATE) val name = prefs.getString("name", "") val age = prefs.getInt("age", 0) val married = prefs.getBoolean("married", false) Log.d("Main", "name is $name, age is $age, married is $married") } 这样我们就能取出我们存储的数据,非常简单好用。

总结

虽然Sp存储现在已经有更好的技术去替换(MMKV),但Sp存储的原理还是需要我们去了解的,当然,作为安卓数据存储技术,它还是需要我们去熟练使用,这篇文章主要就是简单的介绍了Sp存储的基本使用方法,如果需要深入了解,还是去阅读源码最好,此外,后面我也会去学习MMKV,虽然目前接触项目还没有使用。