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

TextField内容保存到缓存时丢失最后一个字符的问题如何解决

问题原因

你的保存逻辑写法存在两处错误:

  • 你把sharedPref写入逻辑直接声明在了组合函数的顶层作用域,没有封装在onClick回调内部,这会导致每一次组件重组都会自动执行一次保存操作,而不是仅在点击按钮时执行
  • apply()方法没有返回值,你提前声明的pushString变量只是上一次重组时保存逻辑的执行结果,调用它无法触发新的保存操作,读取的永远是之前的旧apiState值

TextField的状态更新触发重组是异步的,你输入最后一个字符后,apiState刚完成更新还没触发新的重组执行顶层的保存逻辑,此时点击按钮用到的还是少了最后一位的旧状态值,就会出现丢字符的问题。

修复方案

把保存逻辑直接写在onClick回调内部,点击时再读取当前最新的apiState执行写入:

val context = LocalContext.current
val sharedPref = context.getSharedPreferences("你的缓存文件名", Context.MODE_PRIVATE)
// 初始化时直接读取缓存赋值给输入框状态
var apiState by remember { mutableStateOf(sharedPref.getString("api", "Invalid") ?: "") }

// 你的TextField组件示例
TextField(
    value = apiState,
    onValueChange = { apiState = it },
    label = { Text("输入API地址") }
)

// 保存按钮示例
Button(
    onClick = {
        // 点击时才执行保存,读的是当前最新的状态值
        sharedPref.edit().putString("api", apiState).apply()
    }
) {
    Text("保存配置")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:54:03