You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Jetpack Compose中SharedPreferences实现报错求助

问题解决:Composable调用不允许在remember计算参数内

错误原因

LocalContext.current是Composable API调用,而remember的calculation参数是被crossinline修饰的非Composable lambda,无法在该lambda内部执行Composable函数调用,这就是报错的核心原因。

修复方案

把LocalContext.current的获取移到remember块外部的Composable作用域内,再将Context传入remember的计算逻辑,同时修正Text组件的参数使用错误:

@Composable
fun ScreenView() {
    // 在Composable作用域内提前获取Context,此处允许调用Composable API
    val context = LocalContext.current
    
    // 用remember持有PreferencesManager实例,传入context作为依赖键
    val preferenceManager = remember(context) {
        PreferencesManager(context)
    }
    
    // 持有authKey的MutableState,初始值从SharedPreferences读取
    val authKey = remember {
        mutableStateOf(preferenceManager.getData("authKey", ""))
    }

    Column {
        // 注意:MutableState需通过.value获取实际字符串值
        Text(text = authKey.value)
    }
}

关键说明

  • 提前获取Context:在ScreenView的Composable根作用域内调用LocalContext.current,这里属于合法的Composable上下文,可安全访问该API。
  • remember依赖键:将context作为remember的参数,确保当Context发生变化时(App运行中基本不会出现),会重新创建PreferencesManager实例,符合Jetpack Compose的状态管理最佳实践。
  • MutableState的正确使用:原代码中Text(authKey)会报错,因为authKey是MutableState<String>类型,必须通过.value访问其内部的字符串值。

内容的提问来源于stack exchange,提问作者mfusco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:18