java где хранить настройки приложения

Сохраняем настройки

sharedpreferences1

Введение

Рассмотрим сначала второй вариант. Хранить данные в базе данных не всегда оправдано, если данных не слишком много, они простые и нам не нужно анализировать данные на предмет, сколько мышек поймал котик в прошлом году и сколько часов он спал в январе и феврале.

Первый вариант с файлами хорош, например, для сохранения больших текстовых заметок. Естественно, и для простых данных мы тоже можем использовать файлы. Записали что-то в файл, а потом открыли его и считали данные.

На самом деле нет необходимости изобретать свой велосипед и придумывать свою структуру для хранения данных. В Android существует класс SharedPreferences (Общие настройки), разработанный специально для этих целей. Приложение автоматически создаёт файл в своей папке и хранит простые данные в виде «ключ — значение». Весь процесс создания, открытия, чтения файла оптимизирован и избавляет вас от головной боли.

Общие настройки поддерживают базовые типы boolean, String, float, long и int, что делает их идеальным средством для быстрого сохранения значений по умолчанию, переменных экземпляра класса, текущего состояния UI и пользовательских настроек. Они чаще всего используются для обеспечения постоянства данных между пользовательскими сессиями и доступа к ним компонентов приложения.

Сохранение значений параметров

Если у вас сохранился старый проект по подсчёту ворон, то можете снова его открыть и добавить новый код. Либо заново создайте проект по памяти, заодно проверите, как усвоили урок и сможете ли вы самостоятельно создать проект с нуля, не заглядывая на сайт за подсказкой.

Создаём переменную, представляющую экземпляр класса SharedPreferences, который отвечает за работу с настройками:

Немного опередим события и представим, что приложение запущено, и мы считаем ворон весь день. Когда мы закрываем приложение, то нам необходимо сохранить информацию в «Общих настройках». Обычно для этих целей используют методы onPause() или onStop().

Чтобы внести изменения в настройки, нужно использовать класс SharedPreferences.Editor. Получить объект Editor можно через вызов метода edit() объекта SharedPreferences. После того, как вы внесли все необходимые изменения, вызовите метод apply(), чтобы изменения вступили в силу.

Теперь при закрытии программы значение счётчика автоматически запишется в файл. При повторном запуске приложения нам уже не нужно инициализировать счётчик со значением 0. Мы можем прочитать сохранённое значение и использовать его для счётчика, чтобы продолжить подсчёт. Сделаем это в методе onResume().

Мы проверяем сначала наличие ключа APP_PREFERENCES_COUNTER, а затем извлекаем из ключа его значение.

Вот и всё. Небольшие изменения в коде сделали программу продвинутой. Теперь вы можете спокойно закрывать и открывать программу, ваши данные не будут потеряны. При желании вы можете добавить кнопку для сброса счётчика. Это вам в качестве домашнего задания.

В теории показаны дополнительные примеры и даны подробные сведения об использовании «Общих настроек». Вам следует хорошенько разобраться в этом механизме, так как он часто используется на практике. Более того, некоторые программисты предпочитают использовать «Общие настройки» вместо базы данных, если это позволяет логика программы, так как это работает быстрее и потребляет меньше ресурсов. Выбор за вами.

Вместо послесловия

Не волнуйтесь, с котёнком всё в порядке. Девочка подобрала его и принесла домой. И добрая девочка по-прежнему пользуется нашей программой «Счётчик ворон». Наверное, биологом станет или ветеринаром.

При написании статьи использовались иллюстрации Рины З..

Источник

ОГЛАВЛЕНИЕ

Сохранение настроек приложения

Сохранение настроек приложения в Java

Свойства

Класс Properties Java используется для сохранения настроек приложения. Этот класс содержит словарь, состоящий из пар ключ/значение. Метод load используется для загрузки сохраненных свойств, и метод storegetProperty вызывается, чтобы получить значение для определенного ключа. Также передается значение параметра по умолчанию, это значение возвращается, если не установлен ключ в объекте Properties. Мы сохраняем properties, используя метод setProperty. Это один из нескольких способов сохранения настроек приложения в Java. используется для сохранения свойств. Метод

WindowListener (слушатель окна)

Нужно загрузить настройки приложения перед отображением окна, потому что требуется установить сохраненную позицию и местоположение окна. Можно сохранить настройки приложения, добавив WindowListener в JFrame. WindowListener будет отправлено сообщение, когда пользователь попытается закрыть окно приложения. Когда это происходит, размер и местоположение JFrame сохраняются в объекте Properties и затем сохраняются в домашнем каталоге пользователя. Можно выйти из приложения, вызвав System.exit(0).

Сохранение настроек в JavaFX

Можно использовать похожие классы для сохранения настроек приложения в нашем JavaFX классе. Единственное отличие состоит в том, что не требуется добавлять WindowListener, просто нужно обновить функцию onClose класса Stage, чтобы сохранить настройки приложения перед выходом из приложения. Это показано в следующем фрагменте кода:

Сохранение настроек приложения в JavaFX

Как видите, можно использовать такие же классы Java для сохранения настроек приложения в JavaFX, как и используемые в Java приложениях. Это одна из лучших возможностей JavaFX, можно использовать большую библиотеку существующих классов Java в программах на JavaFX. Опыт работы с Java Framework можно применить для программирования на JavaFX.

Нужно заметить, что атрибуты x, y, width и height класса Stage все определены как Numbers. Поэтому, если мы сохраняем их на диске, они все сохраняются с десятичной точкой. Это кажется странным, так как размер и местоположение объекта Stage задается в виде числа пикселей. Не имеет смысла использовать десятичную дробь, так как задаются только целые пиксели, 1.5 пикселя не имеет смысла, может быть только 1 или 2 пикселя. Неизвестно, ошибка это или нет. Мы уже отправляли два сообщения об ошибках в JavaFX, а потому не уверены, есть ли смысл в данном случае отправлять другое сообщение об ошибке. Однако кажется странным решение использовать Number вместо Integer (целое число).

Источник

Java где хранить настройки приложения

Этот вопрос задает себе каждый разработчик любого серьезного java приложения. Классическим решением этой задачи является использование класса Properties. Этот класс поддерживает коллекции свойств (properties) вида ключ/значение, где ключи и значения являются строками. Наличие методов сохранения и чтения коллекций в файлах, упрощает организацию физического хранения данных. Несмотря на удобство и простоту использования данного класса хочется обратить ваше внимание, что класс Properties является наследником устаревшего класса Hashtable [1]. Именно по этому рекомендуется использовать класс HashMap, который является аналогом Hashtable.

Для доступа к настройкам программы создадим класс AppSettings. Причем в блоке инициализации статических членов класса будет вызываться private конструктор данного класса. При этом, при первом вызове из основного кода программы, создается единственный экземпляр данного объекта в статическую переменную SINGLETON. Реализующий эту методику код, имеет вид:

Таким образом, к единственному экземпляру данного класса можно получить доступ из любого модуля программы, что напоминает глобальные переменные в других языках программирования. Коллекция HashMap позволяет хранить различные объекты, но мы пока ограничимся только строковыми параметрами. Методы доступа к данным могут иметь вид:

Раз уж мы отказались от использования класса Properties, то изменим формат хранения объектов коллекции на более прогрессивный xml формат. Структура xml файла будет иметь вид:

Данная структура позволит нам в будущем хранить не только значения вида ключ/значение, но и другие типы объектов. Пока же, мы ограничимся строками, аналогично классу Properties. Код построения DOM дерева заданной структуры и трансформации в xml файл будет иметь вид:

Класс сериализации DOM дерева позаимствован в [2]. Для обратной операции чтения данных в коллекцию создадим следующий метод:

А пример вызова методов класса AppSettings в теле программы, показан в следующем участке кода:

Как видно из приведенного кода, все достаточно тривиально. Просто вызываем нужный метод класса AppSettings, создавать экземпляр которого не требуется. Для удобства использования, можно реализовать дополнительные методы извлечения часто используемых типов данных, например getString().

Источник

Как хранить настройки java программ?

Этот вопрос задает себе каждый разработчик любого серьезного приложения. Классическим решением этой задачи является использование класса Properties. Этот класс поддерживает коллекции свойств (properties) вида ключ/значение, где ключи и значения являются строками. Наличие методов сохранения и чтения коллекций в файлах, упрощает организацию физического хранения данных. Несмотря на удобство и простоту использования данного класса хочется обратить ваше внимание, что класс Properties является наследником устаревшего класса Hashtable [1]. Именно по этому рекомендуется использовать класс HashMap, который является аналогом Hashtable.

Для доступа к настройкам программы создадим класс AppSettings. Причем в блоке инициализации статических членов класса будет вызываться private конструктор данного класса. При этом создается единственный экземпляр данного объекта в статическую переменную SINGLETON при первом вызове из основного кода программы. Код, реализующий эту методику имеет вид:

private HashMap fHashMap;
private static AppSettings SINGLETON;
static <
SINGLETON = new AppSettings () ;
>
>

Таким образом к единственному экземпляру данного класса можно получить доступ из любого модуля программы, что напоминает глобальные переменные в других языках программирования. Коллекция HashMap позволяет хранить различные объекты, но мы пока ограничимся только строковыми. Методы доступа к данным могут иметь вид:

// Извлечение объекта из коллекции
public static Object get ( String key ) <
return SINGLETON.fHashMap.get ( key ) ;
>

// Извлечение объекта из коллекции
// при отсутствии данных возвращается значение по умолчанию
public static Object get ( String key, Object deflt ) <
Object obj = SINGLETON.fHashMap.get ( key ) ;
if ( obj == null ) <
return deflt;
> else <
return obj;
>
>

// Добавление объекта в коллекцию
public static void put ( String key, Object data ) <
// prevent null values. Hasmap allow them
if ( data == null ) <
throw new IllegalArgumentException () ;
> else <
SINGLETON.fHashMap.put ( key, data ) ;
>
>

Раз уж мы отказались от использования класса Properties, то изменим формат хранения объектов коллекции на более прогрессивный xml формат. Структура xml файла будет иметь вид:

Данная структура позволит нам в будущем хранить не только значения вида ключ/значение, но и другие типы объектов. Пока же, мы ограничимся строками, аналогично классу Properties. Код построения DOM дерева заданной структуры и трансформации в xml файл будет иметь вид:

Класс сериализации DOM дерева позаимствован в [2]. Для обратной операции чтения данных в коллекцию создадим следующий метод:

А пример вызова методов класса AppSettings в теле программы, показан в следующем участке кода:

Как видно из приведенного кода, все достаточно тривиально. Просто вызываем нужный метод класса AppSettings создавать экземпляр которого не требуется. Можно реализовать еще пару методов для извлечения часто используемых типов данных для удобства использования, например getString().

Источник

Как хранить настройки Java-программ?

Как хранить настройки Java-программ?

Этот вопрос задает себе каждый разработчик любого серьезного Java-приложения. Классическим решением этой задачи является использование класса Properties. Этот класс поддерживает коллекции свойств (Properties) вида ключ/значение, где ключи и значения являются строками. Наличие методов сохранения и чтения коллекций в файлах упрощает организацию физического хранения данных. Несмотря на удобство и простоту использования данного класса, хочется обратить ваше внимание на то, что класс Properties является наследником устаревшего класса Hashtable [1]. Именно поэтому рекомендуется использовать класс HashMap, который является аналогом Hashtable.

Для доступа к настройкам программы создадим класс AppSettings. Причем в блоке инициализации статических членов класса будет вызываться Private-конструктор данного класса. Причем при первом вызове из основного кода программы создается единственный экземпляр данного объекта в статическую переменную SINGLETON. Реализующий эту методику код имеет вид:

Таким образом, к единственному экземпляру данного класса можно получить доступ из любого модуля программы, что напоминает глобальные переменные в других языках программирования. Коллекция HashMap позволяет хранить различные объекты, но мы пока ограничимся только строковыми параметрами. Методы доступа к данным могут иметь вид:

Раз уж мы отказались от использования класса Properties, то изменим формат хранения объектов коллекции на более прогрессивный XML-формат. Структура XML-файла будет иметь вид:

Данная структура позволит нам в будущем хранить не только значения вида ключ/значение, но и другие типы объектов. Пока же ограничимся строками аналогично классу Properties. Код построения DOM-дерева заданной структуры и трансформации в XML-файл будет иметь вид:

Класс сериализации DOM-дерева позаимствован в [2]. Для обратной операции чтения данных в коллекцию создадим следующий метод:

А пример вызова методов класса AppSettings в теле программы показан в следующем участке кода:

Как видно из приведенного кода, все достаточно тривиально. Просто вызываем нужный метод класса AppSettings, создавать экземпляр которого не требуется. Для удобства использования можно реализовать дополнительные методы извлечения часто используемых типов данных, например, getString().

Литература:
1. Арнольд Кен, Гослинг Джеймс, Холмс Дэвид. «Язык программирования Java». Пер. с англ. — М.: Издательский дом «Вильямс», 2001. — 624 с. ISBN 5-8459-0215-0 (рус.).
2. Brett McLaughlin «Java& XML, 2nd Edition» Publisher: O’Reilly. Second Edition September 2001. ISBN: 0-596-00197-5, 528 pages.

Компьютерная газета. Статья была опубликована в номере 14 за 2004 год в рубрике программирование :: java

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • java архитектура web приложения
  • java web приложение примеры