2012-02-09 4 views
8

Я использую SharedPreferences в Android.Everything отлично работает в той же сессии.SharedPreferences не является постоянным

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

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

Я создаю свои предпочтения по телефону

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

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

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

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

preferences.getString(key, defaultValue); 

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

+2

есть у письменного редактора.commit()? – Richa

+1

Если вы 'Set Sakiboy

ответ

26

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

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

'apply()' лучше, чем 'commit()', поскольку он позволяет писать в фоновом режиме – levengli

2

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

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

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

Вы, вероятно, не совершая изменения , Устанавливать свойства, подобные этому

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

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

+23

+1 для пука на ветру. – StackOverflowed

+0

Это ускорилось: D –

0

Преференции не будут сохранены до тех пор, пока их фиксации, т.е .:

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

EDIT: Вышеуказанное имеет тонкую ошибку (с комментариями); вам нужно сохранить ссылку на объект редактора, иначе приведенный выше пример, который совершает значение, создаст новый экземпляр. Должно быть:

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

Для справки, от Android docs:

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

+0

Этот код является неправильным, поскольку вы совершаете команду в другом экземпляре редактора, чем тот, который вы поместили в String. – ffleandro

+0

@ffleandro - если этот код неверен, тогда и каждый другой ответ на этот вопрос. –

+2

Никто, я видел много правильных ответов. Проблема с вашим ответом заключается в том, что при вызове 'preferences.edit()' вы создаете объект SharedPreferences.Editor'. Когда вы «совершаете», вы совершаете в другом экземпляре, чем тот, который вы назвали 'putString', поэтому он не будет сохраняться. Я рекомендую вам снова прочитать «документы», которые вы разместили. – ffleandro

1

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

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", "..."); 

Это работает для меня отлично и полезно

1

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

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

+0

Это просто неправильно: commit() не устарел вообще. Единственное уведомление в API 22: Если вы не заботитесь о возвращаемом значении и используете его из основного потока приложения, используйте вместо этого {@link #apply}. –

1

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

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

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