Android Studio中Kotlin点击器数据无法保存问题求助
点击器数据无法持久化的修复方案
你的点击器无法保存数据的问题出在没有在应用启动时读取已保存的数值,同时SharedPreferences的初始化时机也不合理。以下是具体问题和修复后的代码:
问题分析
- 启动时
value默认赋值为0,没有从SharedPreferences中加载之前保存的点击次数,导致每次重启都重置 sharedPreferences在点击事件里才初始化,启动阶段完全没用到存储的数据- 点击事件里重复初始化SharedPreferences属于冗余操作
修复后的代码
private var value = 0 private lateinit var sharedPreferences: SharedPreferences @SuppressLint("MissingInflatedId") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(layout.activity_main) // 提前初始化SharedPreferences sharedPreferences = getSharedPreferences("value", MODE_PRIVATE) // 读取保存的数值,没有的话默认0 value = sharedPreferences.getInt("value", 0) val text = findViewById<TextView>(clicks) val btn1 = findViewById<ImageButton>(btn) // 用读取到的数值更新文本 text.text = value.toString() btn1.setOnClickListener { value++ text.text = value.toString() // 保存更新后的数值 val edit = sharedPreferences.edit() edit.putInt("value", value) edit.apply() } }
改动说明
- 在
onCreate开头就初始化SharedPreferences,避免重复创建实例 - 启动时主动从SharedPreferences读取之前保存的
value,替代默认的0值 - 点击事件里只负责更新数值、保存数据和刷新文本,去掉冗余的初始化操作
内容的提问来源于stack exchange,提问作者Mady мэди
相关产品推荐
相关产品推荐

