2017-01-12 4 views
1

Я пытаюсь использовать Android Общие настройки для сохранения определенных значений приложения Вот код моего OnCreate:Android Общие предпочтения не Сэкономьте Правильно

protected void onCreate(Bundle savedInstanceState) { 

    SharedPreferences preferences = getSharedPreferences("MyPref", MODE_PRIVATE); 
    boolean firstLaunch = preferences.getBoolean("firstlaunch", true); 

    System.out.println("FIRST LAUNCH? " + firstLaunch); 

    if(firstLaunch == true){ 
     SharedPreferences.Editor editor = getSharedPreferences("MyPref", MODE_PRIVATE).edit(); 
     editor.putString("language", "en"); 
     editor.putInt("theme", R.style.Default); 
     editor.putBoolean("firstLaunch", false); 
     editor.commit(); 
     System.out.println("FIRST LAUNCH:" + preferences.getBoolean("firstLaunch", true)); 
    } 

Когда я перезапустить приложение, firstLaunch по-прежнему верно ? Почему это?

ответ

3

У вас есть проблема. firstlaunch vs firstLaunch

Чтобы избежать этой проблемы, вы должны использовать статический член.

private static final String KEY_PREFS_NAME = "myPrefs"; 
private static final String KEY_FIRST_LAUNCH = "firstLaunch"; 

protected void onCreate(Bundle savedInstanceState) { 

SharedPreferences preferences = getSharedPreferences(KEY_PREFS_NAME, MODE_PRIVATE); 
boolean firstLaunch = preferences.getBoolean(KEY_FIRST_LAUNCH, true); 

System.out.println("FIRST LAUNCH? " + firstLaunch); 

if(firstLaunch == true){ 
    SharedPreferences.Editor editor = getSharedPreferences(KEY_PREFS_NAME, MODE_PRIVATE).edit(); 
    editor.putString("language", "en"); 
    editor.putInt("theme", R.style.Default); 
    editor.putBoolean(KEY_FIRST_LAUNCH, false); 
    editor.commit(); 
    System.out.println("FIRST LAUNCH:" + preferences.getBoolean(KEY_FIRST_LAUNCH, true)); 
} 
+0

Wow думать, что была ошибка! Спасибо, я сделаю это в будущем, чтобы избежать такого типа ошибок –

3

Ваше ключевое значение не прописано правильно, когда вы извлекаете его, так что вы всегда получите true изменения и вы фиксируете на неправильный ключ.

Изменить

boolean firstLaunch = preferences.getBoolean("firstlaunch", true); 

в

boolean firstLaunch = preferences.getBoolean("firstLaunch", true); 
Смежные вопросы