SharedPreferences не является постоянным - PullRequest
10 голосов
/ 09 февраля 2012

Я использую SharedPreferences в Android. Все отлично работает в одном сеансе.

Однако, как только я перезапущу приложение, все настройки, которые были установлены из предыдущего сеанса , будут потеряны.

Есть ли что-то, что мне нужно указать, чтобы SharedPreferences зависало от запуска к запуску?

Я создаю настройки, позвонив по номеру

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

Затем я устанавливаю свойства, например,

preferences.edit().putString(key, value);

и я получаю это

preferences.getString(key, defaultValue);

Спасибо, Victor

Ответы [ 7 ]

26 голосов
/ 09 февраля 2012

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

Preferences.Editor edit=preferences.edit();
edit.putString(key, value);
edit.commit();
18 голосов
/ 09 февраля 2012

Вы, вероятно, не фиксируете свои изменения. Установите свойства как

SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, value);
editor.commit();

Без коммита ты пукаешь на ветру.

3 голосов
/ 09 февраля 2012

Это работает для меня, пожалуйста, попробуйте:

private SharedPreferences mShared;
private Editor mEdit;
mShared = PreferenceManager.getDefaultSharedPreferences(this);

mEdit = mShared.edit();
mEdit.putString(key, value);
mEdit.commit();
2 голосов
/ 09 февраля 2012

, чтобы получить значение в префе

SharedPreferences pref1 = getSharedPreferences(PREFS_NAME, 0);
boolean silent = pref1.getString("silentMode", "...");

для сохранения vlue используйте методы onstoe или onPause

SharedPreferences pref2 = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = pref2.edit();
editor.putString("silentMode", "...");

Это работает для меня хорошо и здорово

1 голос
/ 23 марта 2014

Это код, который работает для меня.

package com.example.persistence;

import android.os.Bundle;
import android.widget.EditText;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;


public class MainActivity extends Activity {

public static final String NOTE_PREFS="note";
SharedPreferences msgSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     msgSettings = getSharedPreferences(NOTE_PREFS,0);

      EditText et= (EditText)findViewById(R.id.editText1);
      if (msgSettings.contains(NOTE_PREFS)) {
            et.setText(msgSettings.getString(
                    NOTE_PREFS, "my note")); 

    }

}
@Override
protected void onPause() {
      EditText et= (EditText)findViewById(R.id.editText1);
      String b = et.getText().toString();
      Editor editor = msgSettings.edit();
      editor.putString(NOTE_PREFS,b);
        editor.commit();
    super.onPause();
}
@Override
protected void onDestroy() {
     EditText et= (EditText)findViewById(R.id.editText1);
      String b = et.getText().toString();
      Editor editor = msgSettings.edit();
      editor.putString(NOTE_PREFS,b);
        editor.commit();
    super.onDestroy();
}

    }
1 голос
/ 05 сентября 2012

Если вы разрабатываете для уровня API?и выше, тогда вы должны использовать editor.apply() вместо editor.commit() при программной модификации ваших предпочтений.editor.commit() устарел, а editor.apply() будет обрабатывать фактическое постоянство в фоновом режиме, чего не делает editor.commit().

Обратите внимание, что editor.apply(), в случае неудачи, делает это молча.

0 голосов
/ 09 февраля 2012

Настройки не будут сохранены до тех пор, пока вы их не зафиксируете, например:

// DON'T DO THIS... See Next Example
preferences.edit().putString(key, value);
preferences.edit().commit();

РЕДАКТИРОВАТЬ : в приведенном выше тексте есть небольшая ошибка (из комментариев);вам нужно сохранить ссылку на объект редактора, в противном случае приведенный выше пример, который фиксирует значение, создаст новый экземпляр.Должно быть:

Preferences.Editor edit = preferences.edit();
edit.putString(key, value);
edit.commit();

Для справки, из документов Android :

Обратите внимание, что вы должны вызвать commit () длялюбые изменения, которые вы выполняете в редакторе, действительно отображаются в SharedPreferences.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...