【发布时间】:2021-08-17 13:59:49
【问题描述】:
我在尝试在 Jetpack Compose 启动时显示保存在我的 DataStore 中的数据时遇到问题。
我有一个使用协议缓冲区序列化数据的数据存储集。我创建数据存储
val Context.networkSettingsDataStore: DataStore<NetworkSettings> by dataStore(
fileName = "network_settings.pb",
serializer = NetworkSettingsSerializer
)
并把它变成视图模型中的 livedata 对象
val networkSettingsLive = dataStore.data.catch { e ->
if (e is IOException) { // 2
emit(NetworkSettings.getDefaultInstance())
} else {
throw e
}
}.asLiveData()
然后在我的@Composable 中我尝试观察这些数据作为状态
@Composable
fun mycomposable(viewModel: MyViewModel) {
val networkSettings by viewModel.networkSettingsLive.observeAsState(initial = NetworkSettings.getDefaultInstance())
val address by remember { mutableStateOf(networkSettings.address) }
Text(text = address)
}
我已经确认数据是在数据存储中,并且保存正确。我已经将一些打印语句放入可组合文件中,并且数据存储中的数据最终会生成它,但从未真正显示在我的视图中。我想说我没有以正确的方式正确地将我的数据设置为有状态,但我认为它也可能不是以正确的方式从数据存储中读取。 是否在可组合文件中显示来自数据存储区的数据,同时显示启动时的初始数据以及实时更改?
【问题讨论】:
标签: android user-interface state android-jetpack-compose datastore