2012-07-08 87 views
1

我在我的android应用程序中有一个设置活动,其目的是保存项目选择的偏好。我的问题是,我的设置不能保存。下面的方法被调用每一个用户做出选择时间:Android活动未保存偏好设置?

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

我也用下面的代码在我的主要活动,其中所有的设置值时恢复启动:

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()方法被调用,但用户选择的任何内容都不会被保存。

换句话说,没有得到保存/恢复。我不知道我在做什么错,但是这个问题一直让我发疯。这用于为我工作之前,但我正在做一个设置用户界面改造和相同的代码突然不工作...

任何帮助吗?

回答

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

在你的方法,我已经注意到了,你的参数不看的权利实际上你为什么要使用SettingsTAG,与0作为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中。

+0

没关系,我刚找到我的解决方案。结果我的restoreValues()方法仅在用户第一次打开应用程序时被调用,从而消除了具有偏好的整个目的。 感谢您的信息,但。我会保留以备日后参考! – Pkmmte 2012-07-08 03:25:12