SharedPreferences не является постоянным

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

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

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

Я создаю настройки, вызывая

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

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

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

и я получаю его

preferences.getString(key, defaultValue);

Спасибо, Виктор

Ответ 1

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

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

Ответ 2

Вероятно, вы не совершаете свои изменения. Задайте такие свойства

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

Без фиксации вы пронзите ветер.

Ответ 3

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

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

mEdit = mShared.edit();
mEdit.putString(key, value);
mEdit.commit();

Ответ 4

чтобы получить значение в pref

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

для сохранения использования vlue onstoe или onPause methds

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

Это работает для меня прекрасно и здорово

Ответ 5

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

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

Ответ 6

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

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

    }

Ответ 7

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

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