如何在多用户或文件中使用 Android DataStore

问题描述

我想使用 DataStore 存储一些首选项。但问题是我的应用程序可以有多个用户,因此需要将这些首选项存储在单独的文件中。我得到了一个仅使用一个用户的工作示例,但我很难支持多个用户。

这是我的代码示例:

class DataStorageRepository(private val context: Context,private val userRepository: UserRepository) {

    private object PreferencesKeys {
        val SETTING_ONE = intPreferencesKey("setting_one")
    }

    // retrieve datastore for currently logged in user. 
    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = userRepository.currentRegistration().name)

    val userPreferencesFlow: Flow<UserPreferences> = context.dataStore.data.map { preferences ->
        val settingOne = preferences[PreferencesKeys.SETTING_ONE] ?: 0

        UserPreferences(settingOne)
    }

    suspend fun storeSettingOne(settingOne: Int) {
        context.dataStore.edit { preferences ->
            preferences[PreferencesKeys.SETTING_ONE] = settingOne
        }
    }

    data class UserPreferences(val lastUsedToAccountTab: Int)
}

我正在使用 Koin 并尝试在注销时卸载 DataStorageRepository 并在登录时重新创建它,但 DataStore 似乎一直处于活动状态,直到应用程序被杀死并且出现以下崩溃:

>

java.lang.IllegalStateException:有多个数据存储处于活动状态 对于同一个文件:[...] 您应该将 DataStore 维护为 单例或确认没有两个 DataStore 处于活动状态 相同的文件(通过确认范围被取消)。

我还尝试使用 CoroutineScope 并在我注销时终止它,但在登录时重新创建范围后,DataStore 似乎没有重新创建。

DataStore 是否支持关闭连接或处理多个文件的方法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)