- Сохраняем настройки
- Введение
- Сохранение значений параметров
- Вместо послесловия
- Как сохранить файл на Android? (FireMonkey)
- Delphi
- Наши проекты
- Урок 11 — Сохраняем настройки программы
- Программирование на Delphi. Часть 2. Разработка Android-приложения
- 1. Подготовка среды разработки Delphi для создания Android-приложений
- 2. Подготовка проекта Android-приложения
- 3. Настройка телефона для разработки Android
- 4. Запуск приложения на Android
- 5. Ввод данных в Android-приложении
- 6. Нажатие кнопки
Сохраняем настройки
Введение
Очень часто требуется сохранить какие-то настройки. Простой пример — девочка с удовольствим пользовалась нашей программой Счётчик ворон и вертела головой в поисках очередной птицы. Но вот незадача — когда девочка вечером закрывала своё приложение, то на следующий день счётчик обнулялся. А так хотелось узнать, сколько ворон можно насчитать за месяц. Но однажды в дождливый осенний день она встретила рыжее чудо. Впрочем, это уже совсем другая история.
Самый простой способ, который приходит в голову — сбросить данные в файл, а при запуске приложения считывать необходимые данные из файла. Второй вариант — работать с базой данных и хранить настройки там.
Рассмотрим сначала второй вариант. Хранить данные в базе данных не всегда оправдано, если данных не слишком много, они простые и нам не нужно анализировать данные на предмет, сколько мышек поймал котик в прошлом году и сколько часов он спал в январе и феврале.
Первый вариант с файлами хорош, например, для сохранения больших текстовых заметок. Естественно, и для простых данных мы тоже можем использовать файлы. Записали что-то в файл, а потом открыли его и считали данные.
На самом деле нет необходимости изобретать свой велосипед и придумывать свою структуру для хранения данных. В Android существует класс SharedPreferences (Общие настройки), разработанный специально для этих целей. Приложение автоматически создаёт файл в своей папке и хранит простые данные в виде «ключ — значение». Весь процесс создания, открытия, чтения файла оптимизирован и избавляет вас от головной боли.
Общие настройки поддерживают базовые типы boolean, String, float, long и int, что делает их идеальным средством для быстрого сохранения значений по умолчанию, переменных экземпляра класса, текущего состояния UI и пользовательских настроек. Они чаще всего используются для обеспечения постоянства данных между пользовательскими сессиями и доступа к ним компонентов приложения.
Сохранение значений параметров
Если у вас сохранился старый проект по подсчёту ворон, то можете снова его открыть и добавить новый код. Либо заново создайте проект по памяти, заодно проверите, как усвоили урок и сможете ли вы самостоятельно создать проект с нуля, не заглядывая на сайт за подсказкой.
Создаём переменную, представляющую экземпляр класса SharedPreferences, который отвечает за работу с настройками:
Вы передаёте в указанный метод getSharedPreferences() имя вашего файла (файл будет создан автоматически) и стандартное разрешение по умолчанию MODE_PRIVATE — только приложение имеет доступ к настройкам. Если вам необходимо, вы можете создать несколько подобных файлов настроек.
Немного опередим события и представим, что приложение запущено, и мы считаем ворон весь день. Когда мы закрываем приложение, то нам необходимо сохранить информацию в «Общих настройках». Обычно для этих целей используют методы onPause() или onStop().
Чтобы внести изменения в настройки, нужно использовать класс SharedPreferences.Editor. Получить объект Editor можно через вызов метода edit() объекта SharedPreferences. После того, как вы внесли все необходимые изменения, вызовите метод apply(), чтобы изменения вступили в силу.
Теперь при закрытии программы значение счётчика автоматически запишется в файл. При повторном запуске приложения нам уже не нужно инициализировать счётчик со значением 0. Мы можем прочитать сохранённое значение и использовать его для счётчика, чтобы продолжить подсчёт. Сделаем это в методе onResume().
Мы проверяем сначала наличие ключа APP_PREFERENCES_COUNTER, а затем извлекаем из ключа его значение.
Вот и всё. Небольшие изменения в коде сделали программу продвинутой. Теперь вы можете спокойно закрывать и открывать программу, ваши данные не будут потеряны. При желании вы можете добавить кнопку для сброса счётчика. Это вам в качестве домашнего задания.
В теории показаны дополнительные примеры и даны подробные сведения об использовании «Общих настроек». Вам следует хорошенько разобраться в этом механизме, так как он часто используется на практике. Более того, некоторые программисты предпочитают использовать «Общие настройки» вместо базы данных, если это позволяет логика программы, так как это работает быстрее и потребляет меньше ресурсов. Выбор за вами.
Вместо послесловия
Не волнуйтесь, с котёнком всё в порядке. Девочка подобрала его и принесла домой. И добрая девочка по-прежнему пользуется нашей программой «Счётчик ворон». Наверное, биологом станет или ветеринаром.
При написании статьи использовались иллюстрации Рины З..
Источник
Как сохранить файл на Android? (FireMonkey)
Как сохранить файл локально на устройстве Android, используя Delphi (XE5, Firemonkey)?
Похоже, не работает. В результате появляется следующее сообщение об ошибке:
Msgstr «Невозможно создать файл /test.txt». Не каталог. «
В соответствии с документом « Создание приложения для Android» найдите путь к документам следующим образом:
Вместо использования System.SysUtils.PathDelim вы можете использовать
Combine выбирает между окнами \ и Linux /
System.IOUtils следует использовать в этой строке вместо установки в предложении uses, потому что, вероятно, есть больше инициалов Tpath.
На моем устройстве (и, предположительно, на всех устройствах Android?) GetHomePath неправильно дает мне / storage / emulated / 0 / … тогда как мне нужно / storage / sdcard0 / …, чтобы добраться до хранилища, видимого в Проводнике Windows через USB.
Поэтому полный путь к моим файлам может быть ‘/storage/sdcard0/Android/data/com.embarcadero.(my app name) / files /’
Предположительно, если у вас есть плагин на SD-карте, это может быть sdcard1 или что-то еще.
Вы можете указать содержимое папки хранения вашего устройства с кодом, подобным этому.
На моем устройстве это дает мне:
Sdcard0 usb emulated
Затем измените S, когда вы хотите исследовать подпапки
Обратите внимание, что папка файлов очищается каждый раз при повторной компиляции и развертывании.
GetHomePath, верните строку с контуром. -> ‘data / data // files’
Источник
Delphi
Наши проекты
Урок 11 — Сохраняем настройки программы
Автор:
Практически у любой программы есть параметры которые нужно сохранять при закрытии программы и при следующем запуске загружать. Примером такой программы может быть стандартные программы Блокнот, Paint и многие другие. Например при закрытии прогрммы «Блокнот» сохраняется положение координаты окна программы, его размеры и другие настройки.
Как все это реализовать? Есть несколько вариантов. Можно создать файл в той же папке что и сама программа. Но тут придется реализовывать обработку на то, что программа может быть запущена не с HDD а, например, с CD. Что приведет к ошибке, так как создать файл на CD программа не сможет. Вторым вариантом является сохранение данных в реестре. Тут уже есть масса приемуществ. Не будет никаких ошибок с записью, если файл запускается с CD и так далее.
Итак, будем сохранять настройки программы в реестре. Теперь нужно определиться с тем, что же программа должна сохранять. В качестве примера сделаем сохранение положения окна и его размеры.
Приступим. Создайте новый проект. Добавьте модуль Registry в секцию Uses. Объявите глобальную переменную:
С ее помощю будем осуществлять доступ к реестру. Далее приступим к написанию процедуры сохранения (начнем именно с сохранения, так как загружать еще нечего):
Разберем, что тут написано и почему именно так. Ну первая строчка «Reg:=TRegistry.Create» это создание переменной. Последняя — освобождение. Далее указываем одну из ветвей. OpenKey — открытие указаной ветви. True — означает, что если такой ветви не существует, то она будет создана. Если бы стоял False и открываемой ветви не существовало бы, то функция бы возвратила ошибку. WriteInteger — это запись ключа реестра. Первый параметр — его имя, второй — значение.
Осталось вызвать вышенаписаную процедуру. Создаем событие формы onFormClose. Оно произойдет при закрытии формы (не обязательно на кнопку закрыть). После создания вызываем процедуру. В будет так:
Далее запускаем программу изменяем положение и закрываем. Открываем редактор реестра и проверяем (для открытия делаем: Пуск -> Выполнить -> Regedit). Теперь нужно написать процедуру загрузки этих параметров:
Тут все тоже самое, что при сохранении, но с некоторыми отличиями. ValueExists возвращает True если ключ с указанным именем в качестве параметра существует, иначе возвратит False. Это сделано для того, чтобы предотвратить ошибку если ключа не существует. Так как программа будет пытаться загрузить ключ которого нету.
Осталось только вызвать процедуру LoadSettings. Вызывать будем в событии формы onCreate:
Запускаем программу и тестируем. Аналогично можно сохранять абсолютно любые настройки. Если нужно сохранить строку (например путь к чему-либо), то вместо WriteInteger используем WriteString, а вместо ReadInteger используем ReadString.
Обсудить на форуме
Источник
Программирование на Delphi. Часть 2. Разработка Android-приложения
Продолжаем нашу серию статей по Delphi. В предыдущем материале мы скачали и установили бесплатную версию Delphi и запустили простейшую программу под Windows, сегодня наша цель: разработать первое приложение на платформе Android и запустить его на своём телефоне.
1. Подготовка среды разработки Delphi для создания Android-приложений
Установим все необходимые инструменты для разработки. Нажмите в главном меню Tools — Manage Platforms
Выберите вкладку Additional Options и там отметьте галочками Java Development Kit 1.8 и Android SDK 25.2.5 — NDK r17b. Нажмите Apply — это запустит процесс скачивания и установки компонентов.
Процесс довольно длительный, может потребоваться перезапуск среды разработки. Старайтесь не нагружать компьютер другими операциями. После успешного завершения вы увидеть надпись Operation Completed.
Нажмите Start working — среда разработки готова к созданию Android-приложений.
ЗАМЕЧАНИЕ. Я протестировал разные варианты установки компонентов Android на нескольких компьютерах и операционных системах. В том числе: когда SDK уже установлено (с Android Studio), когда компоненты ставились вручную с серверов Google, когда использовалась виртуальная машина AdoptOpenJDK. Если вы хотите пойти таким же сложным путём (ручная установка), вот некоторые параметры работающих версий: AdoptOpenJDK (Windows 64-bit OpenJDK 8 (LTS) with HotSpot JVM), Android SDK (sdkmanager «build-tools;29.0.0» «extras;google;usb_driver» «platforms;android-26» «tools» «platform-tools» ), Android NDK r17b.
Если автоматическая установка не сработает, пишите вопросы в комментариях — я постараюсь ответить и дополнить статью.
2. Подготовка проекта Android-приложения
Нажимаем на главном экране (Welcome Page) Create a new Multi-Device Application — Delphi.
Выбираем Header/Footer (шаблон приложения с шапкой и подвалом) и жмём ОК.
Создаем папку проекта, я рекомендую поместить её в каталог C:\work и назвать HelloAndroid
Внесем небольшие изменения в наше приложение. В шапке формы напишем Привет Android. Для этого нажмём на метку HeaderLabel на форме и слева внизу найдём параметр Text.
Изменим его значение на Привет Android — и увидим, что изменился текст на форме.
Запустите эту программу под Windows (нажмите F9) — вы увидите обычную форму. Программа работает.
Переключим целевую платформу для компиляции приложения на Android в правом верхнем углу экрана (дважды щёлкните названии платформы).
Без телефона запустить приложение не получится. Давайте его настроим.
3. Настройка телефона для разработки Android
К сожалению, каждый телефон настраивается по-своему. Я расскажу общую схему на примере моего Xiaomi Redmi Note 4.
Для начала нужно включить режим разработчика. Необходимо зайти в Настройки — О телефоне и семь раз тапнуть пункт — версия MIUI (для телефонов Huawei, например, нужно сделать следующее: окне «О телефоне» необходимо не менее 7 раз нажать по строчке «Номер сборки»).
После этой процедуры зайдите в пункт меню Расширенные настройки, там нажмите Для разработчиков.
В меню разработчиков нужно включить кнопку Отладка по USB и затем Установка через USB. (Нюанс: для Redmi Note 4 в этот момент должна быть вставлена SIM-карта. После включения этих опций симку можно вынуть).
На других телефона процедура выглядит примерно также. Для вашей модели телефона инструкцию включения режим разработчика ищите в Google по запросу: «как включить режим разработчика для *название телефона*» или «как включить отладку по USB для *название телефона*».
После включения этих опций берёте хороший USB-кабель (например, которым заряжаете ваш телефон) и подключаете к компьютеру. На Windows 10 драйвера не потребовались, телефоны Android система определяла сама. Для Windows 8 потребовалось скачать ADB-драйвера для конкретной модели телефона. Они также гуглятся. Скачать подошедший мне adb-драйвер можно с нашего сайта.
При подключении устройства телефон может попросить разрешить отладку через USB для конкретного компьютера. Ставим галку и соглашаемся, нажав ОК. Если не успели, вытаскиваем кабель и вставляем снова.
Но может и не попросить, зависит от модели. Теперь важно, чтобы телефон увидела Delphi.
Скорее всего, после успешного подключения среда разработки подхватит устройство автоматически. Если этого не произойдёт, попробуйте нажать кнопку Refresh devices (обновление устройств). Справа от надписи Android вы увидите название вашего смартфона.
Всё готово к запуску приложения.
4. Запуск приложения на Android
Нажмите F9 (зелёный треугольник в панели управления) для запуска приложения.
Пока программа будет компилироваться, внимательно следите за вашим устройством Android. После создания файла apk (установочного файла Android-приложения) на компьютере он будет передан на ваш смартфон. Например, мой Xiaomi Redmi Note 4 даёт только 10 секунд на подтверждение установки. Если вы не уложитесь в это время (не успеете нажать Установить), установка будет отклонена и её нужно будет запускать заново, нажав F9 в Delphi.
К счастью, можно запомнить этот выбор для конкретного приложения. Ставьте галку (на скриншоте я ещё это не сделал) и нажимайте Установить, когда увидите подобный экран:
Подождите ещё немного — и приложение запустится! Ура!
Значок приложения появится также на рабочем столе вашего смартфона — вы можете запустить его снова или удалить. Для продолжения работы удалять его не нужно, при запуске новых версий из среды разработки Delphi будет заменять его на более свежую версию.
НЮАНС. Если один раз приложение установилось, а потом появляется ошибка, попробуйте удалить его с устройства. Это может быть связано с изменениями настроек телефона, подключением телефона к другому компьютеру и т.д.
Пока приложение совсем простое. Усовершенствуем его — добавим ввод данных.
5. Ввод данных в Android-приложении
Добавьте на форму текстовое поле, для этого найдите компонент TEdit в палитре компонентов (воспользуйтесь поиском, как показано на скриншоте) и перетащите его в верхнюю часть формы.
Под ним добавьте компонент кнопки TButton, как в предыдущем уроке. На самой кнопке напишите слово Приветствие, использовав его поле Text в инспекторе объектов. Ваш экран будет выглядеть примерно так:
И для текстового поля, и для кнопки измените в инспекторе объектов следующие свойства:
Элементы прижмутся к верхней части формы и станут в 2 раза выше, это сделает работу с программой удобнее (особенно на Android). Выглядеть в среде разработки это будет вот так:
6. Нажатие кнопки
Теперь напишем обработчик события — нажатия кнопки. Для этого дважды щёлкните на кнопке с надписью Приветствие — откроется редактор кода. Впишите (или скопируйте с этой страницы) туда следующий текст:
Источник