Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка географических координат в Android-сервисе и их запись в SQLite базу в приложении на Delphi

Delphi , Базы данных , SQL

В статье рассмотрим, как работать с SQLite базой данных одновременно в Android-сервисе и приложении, используя RAD Studio Delphi 10.1. Для начала, давайте разберемся с проблемой, с которой сталкиваются разработчики: при использовании компонентов TConnection (например, ADO, FireDAC, UniDAC) в DataModule, даже без активного подключения, Android-сервис перестает работать, не запуская даже событие OnStartCommand. При этом в логах не обнаруживается явных ошибок.

Решение проблемы

Для решения данной проблемы необходимо обновить компоненты UniDAC до последней версии (6.3.12), что позволит использовать TUniConnection и TUniQuery для работы с SQLite в Android-сервисе. Кроме того, нужно добавить файл базы данных SQLite в проект > Развертывание приложения, установив удаленный путь в ".\assets\internal\".

Пример кода для подключения к базе данных в Android-сервисе:

procedure TDM.conSQLiteBeforeConnect(Sender: TObject);
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
  conSQLite.Database := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sqlite');
{$ENDIF}
end;

Также полезно добавить обработчик ошибок:

procedure TDM.conSQLiteError(Sender: TObject; E: EDAError; var Fail: Boolean);
begin
  Log('--- DB error: %s:', [E.Message]);
  Fail := False;
end;

И обработку команд для сервиса:

function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
  // Код обработки команд сервиса
  // ...
  if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then
  begin
    // Код для отключения базы данных и остановки сервиса
    // ...
  end
  else
  begin
    // Код для подключения к базе данных и выполнения запросов
    // ...
    conSQLite.Connect;
    // ...
    UniQuery.SQL.Text := 'select count(*) as ALLREC from orders';
    UniQuery.Open;
    // ...
  end;
end;

Альтернативное решение

В качестве альтернативы можно использовать компоненты TSQLConnection (dbexpress) и TSQLQuery (dbexpress), которые также успешно работают в Android-сервисе. Эти компоненты проверены в версии Delphi 10.1 Berlin и также работоспособны в Delphi 10 Seattle.

Заключение

При правильном подходе и использовании актуальных версий компонентов, запись географических координат в SQLite базу данных в Android-сервисе и их обработка в пользовательском интерфейсе приложения становится возможной. Это позволяет разработчикам создавать более функциональные и удобные приложения для платформы Android, используя язык Object Pascal и среду разработки RAD Studio.

Создано по материалам из источника по ссылке.

Статья рассматривает проблему и ее решения для работы с SQLite базой данных в Android-сервисе и приложении на Delphi, с использованием компонентов UniDAC и dbexpress.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 13:42:40/0.0033960342407227/0