首页 > 解决方案 > SharedPreferences 无法按预期保存键值

问题描述

我无法切换键值 onoff。为什么每次按钮(声音)单击时键值都没有改变?默认的onoff 值为0,on 按钮单击onoff 值应该变为1。但它不能。为什么?

private var mp: MediaPlayer? =null
    var sound_onoff:Int=0

onCreat{...

mp= MediaPlayer.create(this, R.raw.key_tone)


val pref = applicationContext.getSharedPreferences("MyPref", 0)
        val editor = pref.edit()

sound_onoff = pref.getInt("onoff", 0)

sound.setOnClickListener{
            when(sound_onoff){
                1->{sound.setText("SOUND ON")
                    mp?.setVolume(1F,1F)
                    mp!!.start()
                    editor.putInt("onoff", 0)
                    editor.apply()}
                0->{sound.setText("SOUND OFF")
                    mp?.setVolume(0F,0F)
                    mp!!.start()
                    editor.putInt("onoff", 1)
                    editor.apply()}
            }
        }

标签: androidkotlinsharedpreferences

解决方案


我建议您使用 Boolean 而不是 Int。

以及为什么您的代码不起作用。因为您sound_onoff = pref.getInt("onoff", 0)只输入了 onCreate ,所以它只在创建类时调用一次。

您需要在需要检查时调用sound_onoff = pref.getInt("onoff", 0)它。

试试这个:

sound.setOnClickListener{
sound_onoff = pref.getInt("onoff", 0)
            when(sound_onoff){
                1->{sound.setText("SOUND ON")
                    mp?.setVolume(1F,1F)
                    mp!!.start()
                    editor.putInt("onoff", 0)
                    editor.apply()}
                0->{sound.setText("SOUND OFF")
                    mp?.setVolume(0F,0F)
                    mp!!.start()
                    editor.putInt("onoff", 1)
                    editor.apply()}
            }
        }

希望这有帮助!


推荐阅读