Android Activity没有保存首选项?

时间:2012-07-08 00:23:21

标签: java android sharedpreferences

我的Android应用程序中有一个Settings活动,其目的是在项目选择上保存首选项。我的问题是,我的设置没有得到保存。每次进行用户选择时都会调用以下方法:

public void savePreferences()
{
    defaultVolumeUnit = MySingleton.getInstance().getDefaultVolumeUnit();
    defaultPressureUnit = MySingleton.getInstance().getDefaultPressureUnit();
    defaultTempUnit = MySingleton.getInstance().getDefaultTempUnit();

    settings = getSharedPreferences(SettingsTAG, 0);
    Editor editor = settings.edit();

    editor.putInt("selectVolume", defaultVolumeUnit);
    editor.putInt("selectPressure", defaultPressureUnit);
    editor.putInt("selectTemperature", defaultTempUnit);

    editor.commit();
}

我还在MAIN活动中使用以下代码,其中所有设置在启动时都会恢复:

public void restoreValues()
{
    settings = getSharedPreferences(SettingsTAG, 0);

    int SelectedVolume = settings.getInt("selectVolume", 0);
    int SelectedPressure = settings.getInt("selectPressure", 0);
    int SelectedTemperature = settings.getInt("selectTemperature", 0);

    // Necessary assignments here...
}

我在整个应用程序中使用全局变量并保存但设置却没有。我很肯定savePreferences()和restoreValues()方法都被调用,但无论用户选择了什么都不会被保存。

换句话说,没有任何东西得到保存/恢复。我不知道我做错了什么,但这个问题让我疯了。以前这对我有用,但是我正在做一个设置UI改版,同样的代码突然无法正常工作......

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

认为您应该在 活动 中执行此操作:

private SharedPreferences prefSettings;

public void restoreValues()
{
    prefSettings = PreferenceManager.getDefaultSharedPreferences(this);

    int SelectedVolume = prefSettings.getInt("selectVolume", 0);
    int SelectedPressure = prefSettings.getInt("selectPressure", 0);
    int SelectedTemperature = prefSettings.getInt("selectTemperature", 0);

    // Necessary assignments here...
}

在我注意到的方法中,您的参数实际上看起来不正确...为什么使用SettingsTAG0作为getSharedPreference方法的参数?您的活动是 延伸 PreferenceActivity?你应该使用上下文。

public void savePreferences()
{
    defaultVolumeUnit = MySingleton.getInstance().getDefaultVolumeUnit();
    defaultPressureUnit = MySingleton.getInstance().getDefaultPressureUnit();
    defaultTempUnit = MySingleton.getInstance().getDefaultTempUnit();

    //settings = getSharedPreferences(SettingsTAG, 0);
    settings = PreferenceManager.getDefaultSharedPreferences(context); // Notice CONTEXT!
    Editor editor = settings.edit();

    editor.putInt("selectVolume", defaultVolumeUnit);
    editor.putInt("selectPressure", defaultPressureUnit);
    editor.putInt("selectTemperature", defaultTempUnit);

    editor.commit();
}

修改 的 如果你想调试它,最好这样做:

public class PreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
    private static final String TAG = "PreferencesActivity";

///.... code....

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
    Log.d(TAG, "onSharedPreferenceChanged() - key = " + key);
    // Yup! The key within the shared preferences was changed... inspect 'em via Log!
}

原因是:只要确认您确实保存了首选项,您就会“收听”这些更改。完成调试后,请务必取出Log个调用,使其不会出现在logcat中。