下面我们再写一个取数据的方法。
private fun get() = runBlocking {
return@runBlocking dataStore.data.map { it[key] ?: “新冠” }.first()
}
你会发现和存数据又有不同,这里的first()就是取值,这个方法换个方式来看就清晰一些。

然后我们在取数据按钮的点击事件中调用。

下面我们运行一下:

第一次我先取数据,显示的是默认值,然后我存数据再取数据。效果就是这样,但你会觉得使用起来很麻烦,不如SP好用,这个我们后面再去封装,先了解一些它的功能特性。
在进行定义dataStore时,会在手机中生成一个pb文件,这里我们用虚拟机来看,

然后通过你的程序包名去找

这里的文件就是存放你的缓存信息的文件。这里我用txt打开看一下

可以看到键和值,也许是浏览文件不对,下面我们清理一下这个数据。在布局中增加一个按钮

在代码中

通过clear方法调用进行数据的清除,清除后我们再看看这个pb文件

这个文件就什么都没有了,清除的干干净净。
这个DataStore是肯定需要封装之后再使用的,直接使用太麻烦了,我们需要封装的像SP那样好用,数据类型就参考这个方法中的数据类型。

在写封装代码之前呢,我们先创建一个App类,里面的代码如下:
class App : Application() {
companion object {
lateinit var instance : App
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
然后我们在AndroidManifest中设置

下面我们新建一个EasyDataStore类,将它设置为object,先创建DataStore,代码如下:
// 创建DataStore
val App.dataStore: DataStore by preferencesDataStore(
name = “Study”
)
// DataStore变量
val dataStore = App.instance.dataStore
下面我们先写好各个数据类型的存取方法,先写存数据的方法:
/**
- 存放Int数据
*/
private suspend fun putIntData(key: String, value: Int) = dataStore.edit {
it[intPreferencesKey(key)] = value
}
/**
1108



被折叠的 条评论
为什么被折叠?



