在 Android 中保存和检索数据
Saving and retrieving data in Android
private var highScore: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_game)
loadData()
playGame()
}
override fun onDestroy() {
super.onDestroy()
saveData()
}
private fun saveData(){
val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.apply{
putInt("INTEGER_KEY", highScore)
}.apply()
}
private fun loadData(){
val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val savedInt = sharedPreferences.getInt("INTEGER_KEY", 0)
highScore = savedInt
binding.highScore.text = "Highscore: $savedInt"
}
我做了一个简单的游戏,我需要存储高分值并在应用程序重新启动时检索该值。我试图在给定的代码中使用 sharedPreferences。但是当我关闭应用程序并重新启动它时,高分数据丢失了。如何保存和检索值?
PS: 在Android Studio 的模拟器中运行 应用程序时,高分值为saved/retrieved。但是当我 运行 我的 phone 上的应用程序时它不起作用。每次我重新启动它都会重置为 0。
您正在尝试保存,当应用程序被销毁时。这有时可能会起作用,当实际调用 onDestroy 时,但肯定不会发生。
Apply 正在将数据异步保存到磁盘,这不会发生,因为您在应用程序被销毁时试图这样做。您必须使用 commit 而不是 apply 来同步保存数据。
我建议将数据保存在应用程序的另一个位置而不是 onDestroy 中,因为它不会在每次应用程序 closed/killed.
时调用
private var highScore: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_game)
loadData()
playGame()
}
override fun onDestroy() {
super.onDestroy()
saveData()
}
private fun saveData(){
val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.apply{
putInt("INTEGER_KEY", highScore)
}.apply()
}
private fun loadData(){
val sharedPreferences = getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
val savedInt = sharedPreferences.getInt("INTEGER_KEY", 0)
highScore = savedInt
binding.highScore.text = "Highscore: $savedInt"
}
我做了一个简单的游戏,我需要存储高分值并在应用程序重新启动时检索该值。我试图在给定的代码中使用 sharedPreferences。但是当我关闭应用程序并重新启动它时,高分数据丢失了。如何保存和检索值? PS: 在Android Studio 的模拟器中运行 应用程序时,高分值为saved/retrieved。但是当我 运行 我的 phone 上的应用程序时它不起作用。每次我重新启动它都会重置为 0。
您正在尝试保存,当应用程序被销毁时。这有时可能会起作用,当实际调用 onDestroy 时,但肯定不会发生。
Apply 正在将数据异步保存到磁盘,这不会发生,因为您在应用程序被销毁时试图这样做。您必须使用 commit 而不是 apply 来同步保存数据。
我建议将数据保存在应用程序的另一个位置而不是 onDestroy 中,因为它不会在每次应用程序 closed/killed.
时调用