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.