Разработка Для Sailfish Os: Работа С Localstorage

Привет! Данная статья является продолжением серии статей, посвященных разработке под мобильную платформу Sailfish OS. На этот раз мы решили рассказать о приложении для контроля финансов, которое позволяет пользователю вести журнал доходов и расходов, а также откладывать средства на достижение целей.

Стоит отметить, что данное приложение является одним из победителей хакатона Sailfish OS в Ярославле, организованного компанией «Открытая мобильная платформа» и ассоциацией FRUCT.



Описание

Наше приложение включает в себя два отдельных модуля.

Первый из них предназначен для работы непосредственно с операциями.

Второй позволяет пользователю создавать цели и отслеживать прогресс сбережений.

Модуль работы с транзакциями позволяет пользователю фиксировать доходы и расходы, а также отображать эти транзакции в виде журнала:



Разработка для Sailfish OS: работа с LocalStorage



Разработка для Sailfish OS: работа с LocalStorage

Как вы можете видеть на скриншоте экрана добавления, для каждой операции определена категория.

Эта классификация помогает пользователю легче ориентироваться в своих финансах.

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

Кроме того, в приложении предусмотрена возможность просмотра статистики за различные периоды времени, чтобы пользователь мог проанализировать свои расходы и в дальнейшем оптимизировать их:



Разработка для Sailfish OS: работа с LocalStorage



Разработка для Sailfish OS: работа с LocalStorage

Второй модуль приложения предоставляет возможность создавать задачи по накоплению средств на любые цели.

Пользователь может зафиксировать в приложении информацию о том, сколько денег он откладывает на ту или иную цель, и отслеживать прогресс, тем самым дополнительно мотивируя себя на выполнение поставленных задач:

Разработка для Sailfish OS: работа с LocalStorage



Работа с базой данных

В данной статье было решено сосредоточиться на работе с базой данных непосредственно из QML-файлов.

Для реализации данной задачи была использована библиотека Локальное хранилище , что позволяет организовать доступ к базам данных SQLite, хранящимся на устройстве.

Чтобы отделить логику работы с базой данных от элементов представления, был создан QML-объект доступа к данным (объект доступа к данным или просто ДАО ), управляет всеми подключениями к базе данных и предоставляет более удобный интерфейс для работы с данными.

Подключения к базе данных открываются с использованием глобального одноэлементного объекта.

Локальное хранилище .

На нем вызывается метод openDatabaseSync() , который напрямую открывает соединение или создает базу, если она не была создана ранее.

Все соединения автоматически закрываются во время сборки мусора.

Ниже приведена часть кода файла Dao.qml:

  
   

import QtQuick 2.0 import QtQuick.LocalStorage 2.0 Item { Component.onCompleted: { database = LocalStorage.openDatabaseSync("SaveYourMoneyDatabase", "1.0") } //.

}

Транзакции и запросы при работе с базой данных оформлены как JS-функции: получить результаты требуют функций обратного вызова, которые вызываются после завершения операций.

Вы можете вызывать методы полученного объекта соединения.

чтениеТранзакция() И сделка() , которые создают транзакцию для чтения или изменения данных и передают ее функции обратного вызова, указанной в качестве аргумента этих методов.

Методы можно вызывать внутри этих функций.

выполнитьSql() , содержащий запросы SQL. В нашем приложении нам нужно было создать базу данных с тремя таблицами: Таблица транзакций для хранения транзакций, Таблица целей для целей и КатегорииСтол по категориям операций:

Component.onCompleted: { database = LocalStorage.openDatabaseSync("SaveYourMoneyDatabase", "1.0") database.transaction(function(tx) { tx.executeSql("CREATE TABLE IF NOT EXISTS TransactionsTable( id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT, sum INTEGER, category_id INTEGER, type INTEGER, goal_id INTEGER, description TEXT)"); tx.executeSql("CREATE TABLE IF NOT EXISTS CategoriesTable( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, type INTEGER)"); tx.executeSql("CREATE TABLE IF NOT EXISTS GoalTable( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, sum INTEGER, isFinished INTEGER)");

Теги: #разработка мобильных приложений #sailfish os #qml #SQLite #Разработка мобильных приложений #Qt #Разработка для Sailfish OS

Вместе с данным постом часто просматривают: