java - Android Activity 不保存首选项?

标签 java android sharedpreferences

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

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 Activity 中使用以下代码,其中所有设置都会在启动时恢复:

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 改造,相同的代码突然不起作用......

请问有什么帮助吗?

最佳答案

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

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...
}

在我注意到的您的方法中,您的参数实际上看起来不正确...为什么您使用 SettingsTAG,并使用 0 作为 的参数>getSharedPreference 方法?您的 Activity 是否延长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 中。

关于java - Android Activity 不保存首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379753/

相关文章:

java - Spring和Postgres事务错误

android - 在整个 Activity/Fragment 生命周期中处理异常

android - Flutter - 在每次应用重启后保持变量的值

java - 添加和读取cookie

java - AtomicInteger 的 check-then-act 用法是否需要同步?

java - 许多 drawBitmap 后图像质量变差

android - 无法访问 Camera 类型的封闭实例

android - 共享首选项 "limit"

flutter - 如何在flutter中使用当前主题保存应用程序的状态?

Java 将 Set<Set<String>> 转换为 List<List<String>>