Java 使用GetDefaultSharedReferences-在活动之间重置SharedReference值

Java 使用GetDefaultSharedReferences-在活动之间重置SharedReference值,java,android,sharedpreferences,Java,Android,Sharedpreferences,因此,我的应用程序中有两个活动-StartActivity和SettingsActivity 在StartActivity(启动活动)中,我从SharedRef读取音量和声音值。如果没有设置,我将它们设置为默认值,否则我将获取找到的值。以下代码位于OnCreate的StartActivity中 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); String levelValue

因此,我的应用程序中有两个活动-StartActivity和SettingsActivity

在StartActivity(启动活动)中,我从SharedRef读取音量和声音值。如果没有设置,我将它们设置为默认值,否则我将获取找到的值。以下代码位于OnCreate的StartActivity中

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

String levelValue = sharedPref.getString(getString(R.string.levelpref), null);
String soundValue = sharedPref.getString(getString(R.string.soundpref), null);

if(levelValue == null)
{
    String levelDefaultValue = (getResources().getStringArray(R.array.level))[0];
    String soundDefaultValue = (getResources().getStringArray(R.array.sound))[0];

    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putString(getString(R.string.levelpref), levelDefaultValue);
    editor.putString(getString(R.string.soundpref), soundDefaultValue);
    editor.apply();
}
在SettingsActivity中,我有一个保存按钮,用于保存声音和音量的新设置值

public void saveSettings(View v)
{
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(getString(R.string.levelpref), level);
        editor.putString(getString(R.string.soundpref), sound);
        editor.apply();
}
现在,当我启动我的应用程序-StartActivity启动-看到声音和音量的SharedPref值未设置,因此指定了一个默认值。接下来,我转到“设置”活动,设置声音和音量的新值并保存(通过调试器,我可以验证是否设置了新值)

但是,当我回到StartActivity时,SharedPref值出于某种原因会重置回之前设置的默认值。从这些讨论中,我了解到使用GetDefaultSharedReference应该在活动之间保留值

你知道问题出在哪里吗

Min sdk版本:11
目标sdk版本:18

我认为您使用的是两种不同的
SharedReference
,因为您在2活动中使用的与上下文和上下文相关的方法不同,或者您不保存编辑器对象。也许这段代码可以帮助您:

    SharedPreferences setting = getSharedPreferences("HomeSetting", 0);
    Editor editor = setting.edit();
    editor.putBoolean(SERVICE_ON_VALUE, false);
    editor.commit();

希望有用:)

我发现每次都必须在onResume中重新打开PreferenceManager.GetDefaultSharedReferences(此),或者在可能的更改后进行检查。

我尝试了editor.commit()和editor.apply()。不幸的是,这两种方法似乎都不起作用。所以请使用此SharedReferences。我使用它类似你的需要和工作很好!尝试同时使用SharedReferences和SharedDefaultPreferences-结果相同!看起来我可能必须开始在活动之间传递这些变量。@Hari:不,你应该找到你做错了什么。你发布的代码没问题-你在其他地方做错了什么。你甚至懒得发布你的API级别!打印钥匙。您确定R.string.soundpref等是相同的吗?你是否有机会导入R.android?是的,我指的是两个地方的同一个键。发布更多你的代码。API级别?在提交首选项后和阅读它们之前添加调试打印-它们的顺序正确吗?清理你的项目。