3

我已经创建了我的DataStore并且我有一个布尔值:

private val DID_REBOOT = booleanPreferencesKey("did_reboot")
val didRebootFlow: Flow<Boolean> = context.dataStore.data
    .map { preferences ->
        preferences[DID_REBOOT] ?: false
    }
suspend fun setDidReboot(didReboot: Boolean) {
    context.dataStore.edit { preferences ->
        preferences[DID_REBOOT] = didReboot
    }
}

现在,BroadcastReceiver我需要检查这个值。根据值,我需要执行数据库操作:

GlobalScope.launch {
    if(ds.didRebootFlow.first()) {
        Log.d("-----------------", "true")
    } else
        Log.d("-----------------", "false")
}

在我的应用程序的某个地方,我设置didRebootFlowtrue. 但是我的广播正在打印false(在第二次尝试中它工作正常)。

2021-04-27 12:42:24.347 7469-7469/com.test.datastore D/-----------------: false

我是挂起函数的新手,Flow无法弄清楚如何使我的代码工作。

我的代码逻辑强烈依赖于该字段的值。如何在didRebootFlow这里(并立即)到达一次?

我不想使用.collect { },因为我不想didRebootFlow连续“观察”。我只想得到它的价值一次。(因为didRebootFlow不停地观察意味着我会做很多数据库操作)。

4

0 回答 0