本文正在参加「金石方案 . 瓜分6万现金大奖」
前语
本篇主要介绍本人在作业最常用的数据存储办法——haredPreferences存储,即sp存储,该办法存储比较便利,用于存储用户本地持久化数据,运用过程中也呈现过一些不好处理的坑,但不可否认,假如需求有一些需求APP本地存储的数据,我仍是会首选sp存储,毕竟写起来很简单(作业开发的项目代码已经将其简化封装为东西类,只要写key和set办法与get办法即可调用,所以感觉很便利)。
正篇
SharedPreferences存储概述
该存储办法是运用键值对(key-value)进行存储数据,换而言之,当咱们想用其保存一条数据,需求给这条数据供给一个对应的键(key),然后在读取数据的时分就能够通过这个键(key)将相应的值(value)取出。



1.int(整型)
2.long(长整型)
3.float(浮点型)
4.String(字符串)
5.Set<String>(字符串集合)
存入以上对应的类型,咱们在取出时也会取得相同类型的数据。
运用办法
存储数据
首要,咱们看看sp存储的存数据办法:\
1.getSharedPreferences()办法


2.getPreferences()办法
这个办法是Activity类中供给的:

运用实例:
布局中咱们加一个按钮 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()
}
}
咱们运转程序,然后按一下按钮:



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

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,尽管现在接触项目还没有运用。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。