Если у вас есть относительно небольшая коллекция значений «ключ-значение», которую вы хотите сохранить, вы можете использовать API- SharedPreferences
. Объект SharedPreferences
указывает на файл, содержащий пары «ключ-значение», и предоставляет простые методы для их чтения и записи. Каждый файл SharedPreferences
управляется платформой и может быть частным или общим.
На этой странице показано, как использовать API-интерфейсы SharedPreferences
для хранения и получения простых значений.
Получите доступ к общим предпочтениям
Вы можете создать новый общий файл настроек или получить доступ к существующему, вызвав один из этих методов:
-
getSharedPreferences()
: используйте это, если вам нужно несколько файлов общих настроек, идентифицированных по имени, которое вы указываете в первом параметре. Вы можете вызвать это из любогоContext
вашего приложения. -
getPreferences()
: используйте это изActivity
, если вам нужно использовать только один общий файл настроек для действия. Поскольку при этом извлекается файл общих настроек по умолчанию, принадлежащий действию, вам не нужно указывать имя.
Например, следующий код обращается к файлу общих настроек, который идентифицируется строкой ресурса R.string.preference_file_key
, и открывает его в приватном режиме, чтобы файл был доступен только вашему приложению:
Котлин
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Ява
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
При присвоении имен вашим общим файлам настроек следует использовать имя, которое однозначно идентифицирует ваше приложение. Хороший способ сделать это — добавить к имени файла идентификатор вашего приложения . Например: "com.example.myapp.PREFERENCE_FILE_KEY"
В качестве альтернативы, если вам нужен только один общий файл настроек для вашей деятельности, вы можете использовать метод getPreferences()
:
Котлин
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Ява
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Если вы используете API SharedPreferences
для сохранения настроек приложения, вместо этого вам следует использовать getDefaultSharedPreferences()
чтобы получить файл общих настроек по умолчанию для всего вашего приложения. Дополнительную информацию см. в руководстве разработчика настроек .
Напишите в общие предпочтения
Чтобы записать файл общих настроек, создайте SharedPreferences.Editor
, вызвав edit()
в вашем SharedPreferences
.
Передайте ключи и значения, которые вы хотите записать, с помощью таких методов, как putInt()
и putString()
. Затем вызовите apply()
или commit()
, чтобы сохранить изменения. Например:
Котлин
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Ява
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
немедленно изменяет объект SharedPreferences
в памяти, но записывает обновления на диск асинхронно. Альтернативно вы можете использовать commit()
для синхронной записи данных на диск. Но поскольку commit()
является синхронной, вам следует избегать ее вызова из основного потока, поскольку это может приостановить рендеринг пользовательского интерфейса.
Чтение из общих настроек
Чтобы получить значения из файла общих настроек, вызовите такие методы, как getInt()
и getString()
, предоставив ключ для нужного значения и, при необходимости, значение по умолчанию, которое будет возвращено, если ключ отсутствует. Например:
Котлин
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Ява
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);