Shared Preference всегда возвращает значение по умолчанию
Вот код, который я использую, чтобы создать и сохранить значение в настройках. исходящий является строковой переменной.
SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("PhoneNo","Hi");
editor.commit();
Вот код для получения значения из SharedPreference.
SharedPreferences sp
=getSharedPreferences(outgoing,Activity.MODE_PRIVATE);
String calln = sp.getString("PhoneNo","0");
Toast.makeText(mContext, "SHARED"+calln,Toast.LENGTH_LONG).show();
4 ответа
Вы, вероятно, должны позвонить getSharedPreferences
в контексте, из которого вы получаете к ним доступ.
Поэтому, в зависимости от того, как вы можете получить доступ к своему контексту, если вы передаете его какой-либо другой деятельности или в асинхронной задаче, вот несколько примеров использования:
this.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
context.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
Кроме того, один из способов проверить свои вещи - использовать слушателя, когда SharedPreferences
переодеться:
onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
Called when a shared preference is changed, added, or removed.
Вы также можете использовать Preference Manager
чтобы получить SharedPreferences
:
PreferenceManager.getSharedPreferences(YOUR_CONTEXT).getString(
"PhoneNo", "0");
Или хранить их:
PreferenceManager.getSharedPreferences(YOUR_CONTEXT).edit().putString(
"PhoneNo", "Hi").commit();
Наиболее вероятная причина того, что Shared Preference всегда возвращает значение по умолчанию, заключается в том, что вы сохранили значение в одном файле настроек, а затем попытались получить его в другом файле настроек. Это может произойти, если вы позвоните getPreferences()
из разных видов деятельности, потому что getPreferences()
создает другой файл настроек в зависимости от действия, в котором он создан.
Решение
Самое простое решение - всегда получать ваши общие настройки, например:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
Это будет использовать один файл настроек для всего приложения.
Альтернативное решение
Если по какой-то причине вам нужно использовать разные файлы настроек, то вы можете сделать
final static String PREF_FILE_1 = "pref_file_1";
...
SharedPreferences sharedPref = context.getSharedPreferences(PREF_FILE_1, Context.MODE_PRIVATE);
Просто убедитесь, что вы всегда используете правильное имя файла для настроек, которые вы пытаетесь сохранить и получить.
Местные предпочтения
Если вам действительно нужно только предпочтение для конкретной деятельности, то вы можете использовать getPreferences(Context.MODE_PRIVATE)
, Только не ожидайте, что сможете получить значения из другой Деятельности таким же образом.
Смотрите также
- Этот ответ описывает различия между различными способами получения
SharedPreferences
, - Разница между getDefaultSharedPreferences и getSharedPreferences
- Возиться с общими настройками Android - какую функцию использовать?
Изменить это Activity.MODE_PRIVATE
к этому Activity.MODE_MULTI_PROCESS
Возможно, проблема связана с другим контекстом во время хранения значения и доступа к значению.
При установке значений попробуйте изменить это:
SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
к этому:
SharedPreferences sp = getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
То же самое при получении значений - не забудьте добавить getApplicationContext()
в вашем звонке SharedPreferences
РЕДАКТИРОВАТЬ: Убедитесь, что ваша "исходящая" строка одинакова в обеих операциях