无法按预期使用 SharedPreferences activity

Can't use SharedPreferences in intended activity

我的项目中有两个classes MainActivityPickTimeForNotif。在 MainActivity getSharedPreferences 中工作得很好,我可以保存我的数据并取回它。然而,在 PickTimeForNotif 中,同样的方法似乎什么都不做。

这是我简化的 MainActivity class:

class MainActivity : AppCompatActivity(), ChangeCupDialogFragment.StringListener {
    @SuppressLint("SetTextI18n")
    
    //this is variable i'm saving
    private var drankToday = 0
    
    //function in which i save my value to SharedPreferences
    private fun saveWaterCountToInternalStorage(clickCounter: Int) {
        val sharedPref = this.getSharedPreferences("something", Context.MODE_PRIVATE)
        with (sharedPref.edit()){
            putInt(getString(R.string.clickCount), clickCounter)
            apply()
        }
    }
    
    //and here i get it from there
    private fun loadWaterCountToInternalStorage(): Int {
        val sharedPref = this.getSharedPreferences("something", Context.MODE_PRIVATE)
        return sharedPref.getInt(getString(R.string.clickCount), drankToday)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        val setupNotifButton = findViewById<Button>(R.id.setupNotifButton)

        setupNotifButton.setOnClickListener{
            val notifIntent = Intent(applicationContext, PickTimeForNotif::class.java)
            startActivity(notifIntent)
        }

    }
}

setOnClickListener我打算我的第二个activityPickTimeForNotif,就在这里。

class PickTimeForNotif: AppCompatActivity(), TimePickerFragment.OnCompleteListener {
    val APP_PREFERENCES = "settings"
    private val SAVED_FROM_HOUR = "SetFromHour"
    private var FROM_HOUR = 99

    private fun saveTimeToInternalStorage(prefName1: String, Hour:Int) {
        val sharedPref = this.getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE)
        with (sharedPref.edit()){
            putInt(prefName1, Hour)
            apply()
        }
    }

    private fun loadTimeFromInternalStorage() {
        val sharedPref = this.getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE)
        if (sharedPref.contains(APP_PREFERENCES)) {
            sharedPref.getInt(SAVED_FROM_HOUR, FROM_HOUR)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.pick_time_activity)
        saveTimeToInternalStorage(SAVED_FROM_HOUR, 1)
        loadTimeFromInternalStorage()
        Toast.makeText(applicationContext,"$FROM_HOUR", Toast.LENGTH_SHORT).show()
    }
}

在上面的代码中,我试图将值(例如 1)设置为 SAVED_FROM_HOUR 键,然后将其取回并分配给 FROM_HOUR 变量。但是,Toast 显示 99,这意味着新数据未正确加载。我尝试将 loadTimeFromInternalStoragesaveTimeToInternalStorage 中的所有代码都放到 onCreate 中,但结果是一样的。

我还尝试在使用

调用 getSharedPreferences 后检查首选项文件是否存在
if (sharedPref.contains(APP_PREFERENCES))

但事实并非如此。

所以我想解释一下我做错了什么以及为什么我可以将数据保存在我的 MainActivity 中,但不能保存在第二个 MainActivity 中。非常感谢任何人!!

loadTimeFromInternalStorage() 中,您正在获取值但没有像这样分配给变量:

private fun loadTimeFromInternalStorage() {
        val sharedPref = this.getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE)
        if (sharedPref.contains(APP_PREFERENCES)) {
            FROM_HOUR = sharedPref.getInt(SAVED_FROM_HOUR, FROM_HOUR)
        }
    }

此外,在这一行 FROM_HOUR = sharedPref.getInt(SAVED_FROM_HOUR, FROM_HOUR) 中,getInt() 方法中的最后一个参数是默认值,因此您应该为其创建另一个常量或提供 0。