среда, 6 ноября 2013 г.

Сохраняем настройки приложения, используя Shared Preferences

Приветствую всех посетителей.

Очень часто при разработке более-менее серьёзного приложения для Android требуется где-то и как-то сохранять настройки программы, чтобы они сохранялись после перезапуска приложения. Существует множество вариантов для решения данной задачи, например: сохранять всё в XML-файл; в SQL-базу; хранить настройки в интернете; использовать "Shared Preferences".
Сегодня я хочу рассказать вам, как сохранять простейшие данные в виде «ключ - значение» используя при этом API Android’а - "Shared Preferences".


Начнём с описания.
SharedPreferences – это класс, который позволяет сохранять и извлекать данные в виде пар "ключ-значение". 
Вы можете использовать "SharedPreferences", чтобы сохранить данные различных типов: booleans, floats, ints, longs, и strings. Эти данные будут сохраняться для всех сеансов пользователей (даже если ваше приложение будет завершено). Более подробно вы можете ознакомиться в документации по API Android’а: Storage Options - Using Shared Preferences

К сожалению, в Delphi XE5 я не нашёл встроенной поддержки этого класса (Unit Scopes and the Units in Each Unit Scope). (Возможно, я плохо искал…). Тут нам на помощь приходит сообщество, и мы находим человека, которого зовут Chris Rolliston. Он написал модуль поддержки "SharedPreferences" в Android для Delphi XE5 и поддерживает его, за что ему огромное спасибо. Нам же остаётся только скачать файл "CCR.PrefsIniFile.Android.pas" (Отсюда или отсюда), подключить к нашему проекту и использовать (Не забываем сообщать о багах, если конечно найдёте их). Как именно использовать этот модуль, вы можете посмотреть в демо версии, которую автор написал специально для демонстрации возможностей модуля. (Прим. демка написана под 7-ми дюймовое устройство).


В общем-то, это всё, теперь вы можете использовать API Android’а для хранения настроек вашего приложения. Удачной разработки.

Актуальная версия: https://github.com/chrisrolliston/CCR.PrefsIniFile

7 комментариев:

  1. Не работает под Delphi XE 7 ?
    Не считывает ничего! Хотя я записываю !
    Есть демка, где работает ?

    ОтветитьУдалить
  2. Есть подозрение, что не работает под андроид 5.1, по крайней мере под 4.4 все работало, а после обновления андроида перестало.

    ОтветитьУдалить
  3. ларчик просто открывался. Обновил модуль CCR.PrefsIniFile.Android.pas и все срослось

    ОтветитьУдалить
  4. А какой код? как пользоваться компонентом?

    ОтветитьУдалить
    Ответы
    1. Добавил новую ссылку, там есть демо.

      Удалить
    2. А с комментами никак не найти?

      Удалить
    3. Также интересовался вопросами сохранения настроек под андроидом, поэтому данный раздел заинтересовал. Однако использовать delphi не хочется, поскольку работаю в C++ builder (сейчас XE7)
      Под Windows все просто, есть класс TIniFile, его использование решает все вопросы.
      Под андроидом его можно использовать точно так же также, единственная проблема состоит в получении каталогов для хранения файла настроек.
      для этого достаточно использовать TPath::GetDocumentsPath() или TPath::GetSharedDocumentsPath() для получения каталога приложения или расшаренного каталога приложений. Файл лучше назвать типа MyIni.txt,

      Удалить