Если у вас относительно небольшая коллекция пар "ключ-значение", которую вы хотите сохранить, вы можете использовать API SharedPreferences. Объект SharedPreferences указывает на файл, содержащий пары "ключ-значение", и предоставляет простые методы для их чтения и записи. Каждый файл SharedPreferences управляется фреймворком и может быть как частным, так и общим.
На этой странице рассказывается, как использовать API SharedPreferences для хранения и получения простых значений.
Получите дескриптор для общих настроек.
Вы можете создать новый файл общих настроек или получить доступ к существующему, вызвав один из следующих методов:
getSharedPreferences(). Используйте этот метод, если вам нужно несколько файлов общих настроек, идентифицируемых по имени, которое вы указываете в первом параметре. Вы можете вызвать этот метод из любого объектаContextв приложении.getPreferences(). Используйте этот метод вActivity, если вам нужен только один файл общих настроек для действия. Поскольку этот метод извлекает файл настроек по умолчанию, который принадлежит действию, указывать имя не нужно.
Например, следующий код обращается к файлу общих настроек, который идентифицируется строкой ресурса R.string.preference_file_key, и открывает его в закрытом режиме, чтобы файл был доступен только вашему приложению:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Присваивайте файлам настроек уникальные названия, которые позволят идентифицировать ваше приложение. Например, можно добавить в начало названия идентификатор приложения. Пример:
"com.example.myapp.PREFERENCE_FILE_KEY".
Если вам нужен только один файл настроек для действия, используйте метод getPreferences():
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Если вы используете API SharedPreferences для сохранения настроек приложения, вместо этого используйте getDefaultSharedPreferences(), чтобы получить файл общих настроек по умолчанию для всего приложения. Подробную информацию можно найти в руководстве для разработчиков по настройкам.
Запись в общие настройки
Чтобы записать данные в файл общих настроек, создайте объект SharedPreferences.Editor, вызвав метод edit() для объекта SharedPreferences.
Передайте ключи и значения, которые хотите записать, с помощью таких методов, как putInt() и putString(). Затем вызовите apply() или commit(), чтобы сохранить изменения. Пример:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
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(), указав ключ для нужного значения и, при необходимости, значение по умолчанию, которое будет возвращено, если ключ отсутствует. Пример:
Kotlin
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)
Java
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);