例如,我有2个活动,例如MainActivity和PlayActivity。我正在使用以下代码从MainActivity中的SharedPreferences中检索currentLevel的值。
sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);
// comment this to see if value is saved or not
currentLevel=sharedPreferences.getInt("currentlevel",1);
并且我正在使用以下代码在PlayActivity中更新currentLevel的值。
sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("currentlevel",currentLevel+1);
editor.apply();
现在,我的问题是在运行应用程序时,我无法更新其值。例如,当我在PlayActivity中时,我赢得了一个级别并更新了共享首选项的值,但是在运行应用程序时,如果我返回MainActivity并尝试检索CurrentLevel值,则得到的前一个值未更新。请帮忙。还有一件事,如果我将来推送应用程序的更新,则sharedPrefrence也将使用默认的1值进行更新,否则它将保留其先前的值。
sharedPreferences= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("currentlevel",currentLevel+1);
editor.commit();
我已经创建了一个快速样本供您检查。这是一个“空活动”项目(根据最新的Android Studio模板),具有所有默认设置(在Kotlin中)。
创建项目后,我添加了另一个“空活动”(通过相同的模板),然后修改了它们的布局以具有“编辑文本”和一个按钮。
活动1转到活动2,活动2返回1。
请注意,无论您使用多少号码和进行何种活动,对方都会立即选择。
我在这里将项目留给您检查:
https://github.com/Gryzor/MySharedPreferences
如果您不想打扰git克隆,这是活动1的作用:
// Obtain our private Shared Preferences
// This comes from ContextWrapper.
val sharedPreferences = getSharedPreferences("sample", Context.MODE_PRIVATE)
// restore existing value
val current = sharedPreferences.getInt("A_NUMBER", 0)
editText.setText("$current")
button.setOnClickListener {
val text = editText.text.toString()
val value = try {
text.toInt()
} catch (e: NumberFormatException) {
0
}
// Save the current value
sharedPreferences.edit().putInt("A_NUMBER", value).apply()
// ... and go to the next activity
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
finish()
}
其他活动是相同的,没有意图行:
val intent = Intent(this, MainActivity::class.java)
我想指出的所有这些废话是您管理实例不正确,而没有正确使用something。很难说,因为我们还没有看到您的源代码。
祝你好运:-)