2015-04-23 2 views
0

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

Почему?

+6

SharedPreferences являются удаляется только при удалении кэша приложений, или приложение переустанавливается. Не могли бы вы поделиться кодом, в котором вы сохраняете свои предпочтения? – Knossos

ответ

0

значения Установка в предпочтении:

// MY_PREFS_NAME - a static String variable like: 
// public static final String MY_PREFS_NAME = "MyPrefsFile"; 
    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
    editor.putString("name", "Elena"); 
    editor.putInt("idName", 12); 
    editor.commit(); 

Получение данных от предпочтений:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("text", null); 
if (restoredText != null) { 
    String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. 
    int idName = prefs.getInt("idName", 0); //0 is the default value. 
} 

Дополнительная информация
http://developer.android.com/guide/topics/data/data-storage.html#pref http://developer.android.com/reference/android/content/SharedPreferences.html

+0

public static void SetStrPref (контекст контекста, строковый ключ, значение строки) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences (контекст); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString (ключ, значение); editor.commit(); } – user2034953

+0

Это метод, который я использую для сохранения значения общих предпочтений. Я передаю его значение и ключ – user2034953

+0

Используйте getSharedPreferences (MY_PREFS_NAME, MODE_PRIVATE) вместо getDefaultSharedPreferences (контекст); посмотреть http://stackoverflow.com/questions/5946135/difference-between-getdefaultsharedpreferences-and-getsharedpreferences/6310080#6310080 – Assad

0

Без кода трудно найти решение. В любом случае, я полагаю, вы не переустанавливаете приложение каждый раз перед его запуском. Поэтому, возможно, вы не совершаете изменений в общих предпочтениях. Из Saving Key-Value Sets:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putInt(getString(R.string.saved_high_score), newHighScore); 
editor.commit(); 

Проверьте код, чтобы проверить наличие commit() инструкции.

0

В первую очередь вы делаете больше вещей в инструкции if? Поскольку вы создаете две переменные, которые ничего не делают и уничтожаются после этого предложения 2nd, вы даже назначаете предпочтение «текст» вообще, когда оно не загружается, потому что вы получаете нулевое значение по умолчанию

Извините, я подумал это был ваш код, но потом он попал в assad

0

Я думаю, вы не совершаете эти изменения. SharedPreferences.Editor.commit() необходимо применить после помещения значений. Commit гарантирует сохранение значений.

+0

Я использовал метод comit().все отлично, но когда я перезапускаю приложение, тогда все настройки ясны – user2034953

+0

PLEASE SHARE YOU CODE – warlock

+0

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences (контекст); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString (ключ, значение); editor.commit(); – user2034953

0

Рассмотрим принятый ответ:

Я не знаю, почему, но это работает, просто положив PREFS код внутри асинхронной задачи:

prefss = getSharedPreferences(ACCOUNT_PREFS_NAME, MODE_MULTI_PROCESS); 
new AsyncSave(favNamesList).execute(); 

private static class AsyncSave extends AsyncTask<Void, Void, Boolean> { 

String favNamesList; 

AsyncSave(String favNamesList) { 
    this.favNamesList = favNamesList; 
} 

@Override 
protected Boolean doInBackground(Void... params) { 
    prefss.edit().putString("favNamesList", strings).apply(); 
    return null; 
    } 
}