本文正在参加「金石方案 . 瓜分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()办法
这个办法是Context类供给的,该办法的第一个参数能够用来指定文件名称,名称不存在就会创建一个,Sp存储文件寄存地址为/data/data/< package name >/shared_prefs/目录下;它的第二个参数则是用于指定操作形式,不过只要MODE_PRIVATE这个默许形式可用,等于直接传入0,这个形式意思是只要当前程序才能够对这个Sp文件进行读写。
2.getPreferences()办法
这个办法是Activity类中供给的:
这个办法只要一个参数,即操作形式,并且该办法会将当前的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()
}
}
咱们运转程序,然后按一下按钮:
接着咱们就能够在设备文件管理器中找到data.xml的文件: 这就表示存下来了。
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,尽管现在接触项目还没有运用。