在我的專案中MainActivity有兩個類。PickTimeForNotif在 MainActivitygetSharedPreferences作業得很好,我可以保存我的資料并取回它。然而,在 PickTimeForNotif 中,同樣的方法似乎什么也沒做。
這是我簡化的 MainActivity 類:
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我打算我的第二個活動PickTimeForNotif中,就在這里。
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和放入saveTimeToInternalStorageonCreate,但結果是相同的。
我還嘗試在我打電話后檢查首選項檔案是否getSharedPreferences存在
if (sharedPref.contains(APP_PREFERENCES))
但事實并非如此。
所以我要求解釋我做錯了什么以及為什么我可以將資料保存在我的 MainActivity 中,但不能保存在第二個中。非常感謝任何人提前!
uj5u.com熱心網友回復:
在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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480443.html
