[SharedPreferences的Android值未在应用程序运行时更新

问题描述 投票:0回答:2

例如,我有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值进行更新,否则它将保留其先前的值。

android sharedpreferences
2个回答
0
投票
sharedPreferences= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("currentlevel",currentLevel+1);
    editor.commit();

0
投票

我已经创建了一个快速样本供您检查。这是一个“空活动”项目(根据最新的Android Studio模板),具有所有默认设置(在Kotlin中)。

创建项目后,我添加了另一个“空活动”(通过相同的模板),然后修改了它们的布局以具有“编辑文本”和一个按钮。

活动开始时会做什么?

  1. 加载任何现有的共享首选项值。
  2. 用现有值填充EditText(默认值为0)

单击按钮有什么作用?

  1. 将现有值保存到共享的首选项中。
  2. 启动下一个(或上一个)活动。

活动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。很难说,因为我们还没有看到您的源代码。

祝你好运:-)

© www.soinside.com 2019 - 2024. All rights reserved.