Jetpack DataStore的初使用

Jetpack DataStore的初使用

Android小彩虹2021-07-12 21:17:29100A+A-

在今天凌晨的1:14分,谷歌的安卓开发者官推发布了Jetpack DataStore的alpha版。Jetpack DataStore是一个新的数据存储解决方案,其目的是为了取代SharedPreferences。

a new and improved data storage solution aimed at replacing SharedPreferences.

Jetpack DataStore是基于Kotlin协程和Flow的,并提供两种形式实现。一种是Proto DataStore,另一种是Preferences DataStore。前者可存储类对象(typed objects),后者是存储键值对(和SharedPreferences相似)

由于我还没接触过Protocol Buffers,所以下面的初使用将不涉及Proto DataStore。有需要的去阅读参考文档

各种数据存储方案对比

0 引用

//启用JDK8
android{
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

// Preferences DataStore
implementation "androidx.datastore:datastore-preferences:1.0.0-alpha01"


// Proto DataStore(确保已引用proto相关依赖)
implementation  "androidx.datastore:datastore-core:1.0.0-alpha01"

1 创建DataStore

	val dataStore: DataStore<Preferences> = context.createDataStore(
    	name = "settings"
	)

name由自己自定义。当首次写入数据的时候,将会自动的创建dataStore。该文件在data/data/<包名>/files/{自己定义的name}.preferences_pb

2 设置key

	private val key = preferencesKey<Int>(name = "my_counter")
  • Key的类型只能是Int, Long, Boolean, Float, String
  • name是键的名字

3 写数据

	//取DataStore的值加一后再次存入
	private suspend fun incrementCounter() {
        dataStore.edit { settings ->
            val currentCounterValue = settings[key] ?: 0
            settings[key] = currentCounterValue + 1
        }
    }
    
    btn_write.setOnClickListener {
        lifecycleScope.launch(Dispatchers.IO) {
            incrementCounter()
        }
    }

4 读数据

	private val myCounterFlow: Flow<Int> =
        dataStore.data.map { currentPreferences -> currentPreferences[key] ?: 0 }
        
	btn_read.setOnClickListener {
            lifecycleScope.launch(Dispatchers.IO) {
                myCounterFlow.collectLatest {
                    withContext(Dispatchers.Main) {
                        Toast.makeText(this@MainActivity, "$it", Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }

5 从SharedPreferences合并到DataStore

    private val dataStore: DataStore<Preferences> = createDataStore(
        "settings",
        migrations = listOf(SharedPreferencesMigration(this, "sp"))
    )

传入一个migrations参数,接收一个SharedPreferencesMigration列表。

————————

简单写写,代码能跑就行。 详细看文档和源码吧

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们