简体   繁体   English

使用GetDefaultSharedPreferences - 在活动之间重置SharedPref值

[英]Using GetDefaultSharedPreferences - SharedPref values reset between Activities

So, I have two activities in my application - StartActivity and SettingsActivity. 所以,我的应用程序中有两个活动 - StartActivity和SettingsActivity。

In StartActivity (launch activity) - I read the level and sound values from SharedPref. 在StartActivity(启动活动)中 - 我从SharedPref读取级别和声音值。 If they are not set, I set them to the default values, else I take the values found. 如果它们未设置,我将它们设置为默认值,否则我将获取找到的值。 Following code is inside the OnCreate of StartActivity. 以下代码位于StartActivity的OnCreate中。

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();
}

In the SettingsActivity, I have a save button that saves newly set values for sound and level 在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();
}

Now, when I launch my app - StartActivity starts up - sees that the SharedPref values for sound and level are not setup and so assigns a default value. 现在,当我启动我的应用程序 - StartActivity启动时 - 看到声音和级别的SharedPref值未设置,因此分配默认值。 Next I move to settings activity, set new values for sound and level and save (from the debugger I was able to verify that new values are set). 接下来,我转到设置活动,为声音和级别设置新值并保存(从调试器我能够验证是否设置了新值)。

But, when I come back to my StartActivity, the SharedPref values are for some reason reset back to the default values set before. 但是,当我回到StartActivity时,SharedPref值由于某种原因重置回之前设置的默认值。 From SO discussions, I read that using getDefaultSharedPreferences should retain values between activities. 从SO讨论中,我读到使用getDefaultSharedPreferences应保留活动之间的值。

Any ideas on what the problem is ? 关于问题是什么的任何想法?

Min-sdk version: 11 Target-sdk version: 18 Min-sdk版本:11 Target-sdk版本:18

我发现每次在onResume上都要重新打开PreferenceManager.getDefaultSharedPreferences(this),或者在可能的变化后检查。

i think you work with two different SharedPrefrence as that method you used related to context and contexts are different on 2 activity or you dont save your editor object. 我认为您使用两个不同的SharedPrefrence ,因为您使用的与上下文和上下文相关的方法在2个活动上是不同的,或者您不保存编辑器对象。 maybe this code help you : 也许这段代码可以帮助你:

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

hope to be useful :) 希望有用:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM