Сохраняйте простые данные с помощью SharedPreferences

Если у вас есть относительно небольшая коллекция значений «ключ-значение», которую вы хотите сохранить, вы можете использовать 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);