前言
Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。
如果您当前在使用 SharedPreferences
存储数据,请考虑迁移到 DataStore。
个人感觉不是特别好用,有待完善,可以先使用 MMKV,比较成熟了。
使用
1. 导入依赖
//datastore-preferences
implementation("androidx.datastore:datastore-preferences:1.0.0-rc01")
2. 使用示例
下面的示例方法包含了增加,删除,修改,查询。
/**
* @Author: 13009
* @CreateDate: 2021/7/26 13:38
*@Email:kiwilss@163.com
*@Description:
* https://developer.android.google.cn/topic/libraries/architecture/datastore
*/
class DataStoreActivity: AppCompatActivity(R.layout.activity_datastore) {
val key = stringPreferencesKey("key")
val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
private val PREFERENCE_NAME = "DataStore"
// At the top level of your kotlin file:
private val dataStore: DataStore<Preferences> by preferencesDataStore(name = PREFERENCE_NAME)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//datastore-preferences
btnDatastoreGet.setOnClickListener {
Log.e(TAG, "onCreate: ")
lifecycleScope.launch {
//一旦数据修改立马就能监听到
dataStore.data.collect {
Log.e(TAG, "onCreate: ${it[key]}")
}
}
}
btnDatastorePut.setOnClickListener {
lifecycleScope.launch {
putData()
}
}
btnDatastoreUpdate.setOnClickListener {
lifecycleScope.launch {
dataStore.updateData {
preferencesOf(key to "this is key value - update")
}
}
}
btnDatastoreDelte.setOnClickListener {
lifecycleScope.launch {
dataStore.edit {
it[key] = ""
}
}
}
}
private suspend fun putData() {
val pre = this.dataStore.edit {
it[key] = "this is key value"
}
Log.e(TAG, "putData: ${pre[key]}")
}
}