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), Только не ожидайте, что сможете получить значения из другой Деятельности таким же образом.

Смотрите также

Изменить это Activity.MODE_PRIVATE к этому Activity.MODE_MULTI_PROCESSВозможно, проблема связана с другим контекстом во время хранения значения и доступа к значению.

При установке значений попробуйте изменить это:

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

к этому:

SharedPreferences sp = getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

То же самое при получении значений - не забудьте добавить getApplicationContext() в вашем звонке SharedPreferences

РЕДАКТИРОВАТЬ: Убедитесь, что ваша "исходящая" строка одинакова в обеих операциях

Другие вопросы по тегам