SharedPreferences简介
SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对信息,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改时通过Editor实现。
SharedPreferences可存储的数据
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQLite语句等操作,更加易用。但是SharedPreferences仅支持以下数据类型
- boolean
- int
- float
- long
- String
但是无法进行条件查询,所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库等其他数据存储方式。
SharedPreferences的使用
SharedPreferences的使用其实非常简单方便,这里有几点需要注意:
1、SharedPreferences不能进行修改、写入操作,这部分需交给editor
2、SharedPreferences的初始化需要在onCreate之后,因为需要相应的context
3、SharedPreferences中一些列的get函数第二位参数defValue是获取数据失败时的默认值。
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
companion object{
const val SP_NAME = "spname"
}
lateinit var preferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
preferences = getSharedPreferences(SP_NAME,Context.MODE_PRIVATE)
binding.Write.setOnClickListener {
val editor = preferences.edit()
editor.putString(SP_NAME,binding.edit.text.toString()).apply()
if(editor.commit()){
Toast.makeText(this,"保存数据成功",Toast.LENGTH_LONG).show()
}
}
binding.Read.setOnClickListener {
val result = preferences.getString(SP_NAME,"未查询到数据")//defValue填充默认值
Toast.makeText(this,"查询到数据:$result",Toast.LENGTH_LONG).show()
}
}
}
这里再补充一点关于SharedPreferences的监听的使用
OnSharedPreferenceChangeListener
这里以小编做的一个WorkerManager的小demo为例(不用在意demo细节,看SharedPreferences部分即可)