2016-10-10 3 views
1

В настоящее время я пытаюсь сохранить локальные чаты, но сохраняется только последнее предпочтение. Ниже приводится способ сохранения строки в конкретном ключе.Sharedpreference только сохраняет последнюю строку после перезапуска приложения

public void saveSettings(Context context, String key, String value){ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = preferences.edit(); 
    editor.putString(key, value).apply(); 

Это, как я получить строку:

public String getString(Context context, String key, String defaultValue){ 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
    return preferences.getString(key,defaultValue); 
} 

Проблема заключается в том, что он будет возвращать только последнюю сохраненную строку, остальные кнопки будут возвращать defaultvalue. Например, я сохраняю 3 разных строки с тремя разными ключами с помощью первого метода. При попытке получить строки с getString() Он вернет только строку для последнего сохраненного ключа.

+0

Вы пытались извлечь файл предпочтений и проверить, записаны ли данные? – Mauker

ответ

0

Может быть, я ошибаюсь, но я не могу видеть, совершить здесь, на редактор ...

+0

Я использую apply, который делает то же самое, что и commit, если я правильно его понял –

+0

Yeap, я думаю, просто попробуйте его –

0

как вы формально сохранить предпочтения использует метод commit(), как следующее:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString(key, value); 
editor.commit(); 
+0

Я использую apply, который делает то же самое, что и commit, если я это понял правильно –

+0

@ CT.Kevin разница между ними состоит в том, что .commit() является постоянным (т.е. он сохраняет предпочтения для постоянного хранения). Файл .apply() создает только изменения в памяти, поэтому перезапуск приложения не сохраняет эти настройки. –

+0

@ CT.Kevin также хочу указать, что да, применять делает запись в хранилище асинхронно, но если есть какая-то проблема, препятствующая этому, вы не получите уведомление, поэтому может возникнуть более глубокая проблема с тем, что вы делаете, очевидно, и вы должны уметь отлаживать. –

Смежные вопросы