2012-07-08 2 views
1

내 안드로이드 응용 프로그램에 Settings 활동이 있는데이 목적은 항목 선택시 환경 설정을 저장하는 것입니다. 내 문제는 내 설정이 저장되지 않는다는 것입니다. 다음 방법은 사용자 선택이있을 때마다 호출됩니다Android 활동이 환경 설정을 저장하지 않습니까?

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

을 나는 글로벌 사용

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

가 나는 또한 시작 모든 설정에 복원받을 경우 내 주요 활동에 다음 코드를 사용하여 내 전체 응용 프로그램의 변수는 저장되지만 설정은 유지되지 않습니다. savePreferences() 및 restoreValues ​​() 메서드가 모두 호출되지만 사용자가 선택한 내용이 저장되지 않는다는 것은 긍정적입니다.

즉, 아무것도 저장/복원되지 않습니다. 나는 내가 뭘 잘못하고 있는지 모르지만이 문제는 나를 괴롭혔다. 이전에 나를 위해 일하는 데 사용했지만 설정 UI를 수정하고 동일한 코드가 갑자기 작동하지 않습니다 ...

도움주세요.

답변

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를 사용하는 방법은 getSharedPreference에 대한 매개 변수로 0을 사용합니까? 귀하의 활동은 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

Nevermind, 방금 해결책을 찾았습니다. 내 restoreValues ​​() 메소드는 처음 사용자가 앱을 열 때만 호출되므로 환경 설정을하는 전체 목적을 제거했습니다. 정보를 제공해 주셔서 감사합니다. 나중에 참조 할 수 있도록 보관하겠습니다. – Pkmmte

관련 문제