Сохранение наборов ключ-значение

Если у вас есть относительно небольшая коллекция пар ключ-значение, которую вы хотели бы сохранить, вы должны использовать SharedPreferences API. SharedPreferences объект указывает на файл, содержащий пары ключ-значение и обеспечивает простые методы для их чтения и записи. Каждый SharedPreferences файл управляется библиотекой и может быть личным или общим.

Этот курс покажет вам, как использовать SharedPreferences API для сохранения и извлечения простых значений.

Примечание: SharedPreferences API предназначены только для чтения и записи пар ключ-значение, и вы не должны путать их с Preference API, которые помогают вам строить пользовательский интерфейс для ваших настроек приложения (хотя они используют SharedPreferences в качестве реализации, чтобы сохранить настройки приложение). Информацию об использовании Preference API, см. Настройки.

Получить общие настройки

Вы можете создать новый общий файл настроек или получить доступ к существующему вызвав один из двух методов:

  • getSharedPreferences() — Используйте этот, если вам необходимо иметь несколько общих файлов настроек идентифицируемым по имени, которое вы укажете в первом параметре. Вы можете вызвать его из любого Context в вашем приложении.
  • getPreferences() — Используйте этот из Activity , если вам нужно использовать только один общий файл настроек для деятельности. Т.к. он возвращает общий файл настроек по умолчанию, который относится к деятельности, вам не нужно указывать имя.

Например, следующий код выполняется внутри Fragment. Он обращается к файлу общих настроек, который идентифицируется строкой ресурса R.string.preference_file_key и открывает его с помощью приватного режима, так что файл доступен лишь вашему приложению.

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

При именовании общих файлов настроек, вы должны использовать имя, которое однозначно идентифицирует ваше приложение, как например "com.example.myapp.PREFERENCE_FILE_KEY"

С другой стороны, если вам нужно только один общий файл настроек для вашей деятельности, вы можете использовать getPreferences() метод:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

Внимание: Если вы создаете общий файл настроек с MODE_WORLD_READABLE или MODE_WORLD_WRITEABLE, то любые другие приложения, которые знают идентификатор файла, могут получить доступ к данным.

Сохранить общие настройки

Для записи в общий файл настроек, создайте SharedPreferences.Editor с помощью вызова edit() для вашего SharedPreferences.

Передайте ключи и значения, которые необходимо записать, в методы, такие как putInt() и putString(). Затем вызовите commit() для сохранения изменений. Например:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

Считать общие настройки

Чтобы получить значения из общего файла настроек, вызывайте методы, такие как getInt() и getString(), предоставляя ключ для требуемого значения, и, необязательно, значение по умолчанию на случай, если ключ не найден. Например:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);