无法按预期使用 SharedPreferences activity
Can't use SharedPreferences in intended activity
我的项目中有两个classes MainActivity
和PickTimeForNotif
。在 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,这意味着新数据未正确加载。我尝试将 loadTimeFromInternalStorage
和 saveTimeToInternalStorage
中的所有代码都放到 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。
我的项目中有两个classes MainActivity
和PickTimeForNotif
。在 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,这意味着新数据未正确加载。我尝试将 loadTimeFromInternalStorage
和 saveTimeToInternalStorage
中的所有代码都放到 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。