微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Jetpack DataStore 的正确实例创建alpha07 版本

如何解决Android Jetpack DataStore 的正确实例创建alpha07 版本

因此,在新的 alpha07 版本中,Android 放弃了 private val dataStore = context.createDataStore(name = "settings_pref"),但是他们使用数据存储的新方式对我不起作用。

自从从“androidx.datastore:datastore-core:1.0.0-alpha06”升级到 alpha07 后,我似乎无法在没有获得红色代码的情况下使我的数据存储语法正常工作(添加上下文时出现错误。数据存储。编辑)。同样降级回 alpha06,以前工作的代码现在不再工作(使用 createDataStore)。

我使用的是他们在 main page 上的示例,但在其他任何地方,除了这个示例之外,他们仍然没有更新他们的示例。

@Singleton
 class PreferencesManager @Inject constructor(@ApplicationContext context: Context) {
    val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    
      
        val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
        val exampleCounterFlow: Flow<Int> = context.dataStore.data
            .map { preferences ->
                // No type safety.
                preferences[EXAMPLE_COUNTER] ?: 0
            }
    
        suspend fun incrementCounter() {
            context.dataStore.edit { settings ->
                val currentCounterValue = settings[EXAMPLE_COUNTER] ?: 0
                settings[EXAMPLE_COUNTER] = currentCounterValue + 1
            }
        }
    }

如果有人知道问题(或我的错误),我将不胜感激。

解决方法

这也让我感到困惑,但我想通了(也就是猜测直到它起作用):

// Note: This is at the top level of the file,outside of any classes.
private val Context.dataStore by preferencesDataStore("user_preferences")

class UserPreferencesManager(context: Context) {
    private val dataStore = context.dataStore
    // ...
}

这是针对 DataStore<Preferences>,但如果您需要自定义序列化程序,您可以执行以下操作(与旧方法相同的参数):

// Still top level!
private val Context.dataStore by dataStore(
    fileName = "user_preferences",serializer = MyCustomSerializer,)
,

我遇到了同样的问题,发现了一个错误:上下文应该作为类的成员在任何方法中使用:

private val Context.dataStore by preferencesDataStore("preferences")
class Preferenses(val context: Context) { get,set,etc}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。