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

前语

本篇主要介绍本人在作业最常用的数据存储办法——haredPreferences存储,即sp存储,该办法存储比较便利,用于存储用户本地持久化数据,运用过程中也呈现过一些不好处理的坑,但不可否认,假如需求有一些需求APP本地存储的数据,我仍是会首选sp存储,毕竟写起来很简单(作业开发的项目代码已经将其简化封装为东西类,只要写key和set办法与get办法即可调用,所以感觉很便利)。

正篇

SharedPreferences存储概述

该存储办法是运用键值对(key-value)进行存储数据,换而言之,当咱们想用其保存一条数据,需求给这条数据供给一个对应的键(key),然后在读取数据的时分就能够通过这个键(key)将相应的值(value)取出。

简单易用的安卓SharedPreferences存储(数据存储系列)
该存储办法支撑多种不同的数据类型存储:

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

简单易用的安卓SharedPreferences存储(数据存储系列)
如上面两个图所示,该办法支撑以下几种数据类型:
1.int(整型)
2.long(长整型)
3.float(浮点型)
4.String(字符串)
5.Set<String>(字符串集合)
存入以上对应的类型,咱们在取出时也会取得相同类型的数据。

运用办法

存储数据

首要,咱们看看sp存储的存数据办法:\

1.getSharedPreferences()办法

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

简单易用的安卓SharedPreferences存储(数据存储系列)
这个办法是Context类供给的,该办法的第一个参数能够用来指定文件名称,名称不存在就会创建一个,Sp存储文件寄存地址为/data/data/< package name >/shared_prefs/目录下;它的第二个参数则是用于指定操作形式,不过只要MODE_PRIVATE这个默许形式可用,等于直接传入0,这个形式意思是只要当前程序才能够对这个Sp文件进行读写。

2.getPreferences()办法

这个办法是Activity类中供给的:

简单易用的安卓SharedPreferences存储(数据存储系列)
这个办法只要一个参数,即操作形式,并且该办法会将当前的Activity类名直接作为Sp文件名,其他都和getSharedPreferences()办法类似。

运用实例:

布局中咱们加一个按钮 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"
    android:orientation="vertical"
    tools:context=".SharedPreferencesDemo">
    <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"/>
</LinearLayout>

然后在Activity中在按钮的点击事情时运用Sp存储存入元素:

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()
    }
}

咱们运转程序,然后按一下按钮:

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

接着咱们就能够在设备文件管理器中找到data.xml的文件:
简单易用的安卓SharedPreferences存储(数据存储系列)
简单易用的安卓SharedPreferences存储(数据存储系列)
这就表示存下来了。

Sp文件读取数据办法

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

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

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,尽管现在接触项目还没有运用。