网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 移动端开发 > Android开发 >

Jetpack架构学习(7)——使用DataStore存储配置信息

时间:2025-08-02 17:58

人气:

作者:admin

标签:

导读:原文地址: Jetpack架构学习(7)——使用DataStore存储配置信息-Stars-One的杂货小窝 这里由于开发的app使用的compose架构,比较适合与DataStore一起使用,所以稍微学习了使用方法,顺便记录下 其实...

原文地址: Jetpack架构学习(7)——使用DataStore存储配置信息-Stars-One的杂货小窝

这里由于开发的app使用的compose架构,比较适合与DataStore一起使用,所以稍微学习了使用方法,顺便记录下

其实DataStoreSharePreference使用方式类似,就是如果你的是新项目,没有啥历史包袱,可以试着用下,使用Flow和Compose使用还是挺舒服的

介绍

DataStore分2种类型:

  • Preferences DataStore 存储配置信息
  • Proto DataStore 存储对象数据(二进制)

常用的存储配置信息,存储对象数据一般比较少用,这里也不深究了

使用

1.依赖导入

// Preferences DataStore (SharedPreferences like APIs)
    dependencies {
        implementation("androidx.datastore:datastore-preferences:1.1.7")
    }

    // Alternatively - use the following artifact without an Android dependency.
    dependencies {
        implementation("androidx.datastore:datastore-preferences-core:1.1.7")
    }

2.数据读取和写入

这里,首先得给Context加个扩展方法,用来创建我们的DataStore实例

//需要在顶层kt文件创建,name参数可以任取
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

一般我们一个app,只需要用到一个DataStore即可,如果你想要创建多个,可以搞几个扩展方法,然后创建不同名字的DataStore

下面给一个简单封装示例,用于存储keyexample_counter的为int类型数据:

class MySetting(val context:Context){
	val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
	
	//写入数据:
	suspend fun incrementCounter(data:Int) {
	  context.dataStore.edit { settings ->
	    settings[EXAMPLE_COUNTER] = data
	  }
	}
	
	//读取数据
	val exampleCounterFlow: Flow<Int> = context.dataStore.data
	  .map { preferences ->
	    // No type safety.
	    preferences[EXAMPLE_COUNTER] ?: 0
	}
}
  • intPreferencesKey用来定义你的数据key,从名字看得出来,你的key对应的数据是int类型,除此之外,还有其他几个方法:
  • doublePreferencesKey
  • stringPreferencesKey
  • booleanPreferencesKey
  • floatPreferencesKey
  • longPreferencesKey
  • stringSetPreferencesKey
  • byteArrayPreferencesKey

从名字可以直接看得出类型,这里就不解释了

如果你还是想使用同步方法调用,可以使用协程的runBlocking方法

页面使用:

val context = LocalContext.current
val mySetting  remember { MySetting(context)}

Column(){
    val num by mySetting.exampleCounterFlow.collectAsState(0)
    Text(num.toString())
}

参考


提问之前,请先看提问须知 点击右侧图标发起提问 联系我 或者加入QQ群一起学习 Stars-One安卓学习交流群 TornadoFx学习交流群:1071184701
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信