Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6872 / 1261 | Длительность: 14:18:00
Специальности: Программист
Лекция 7:

Работа с базами данных, графикой и анимацией. Разработка игр

Аннотация: В данной лекции рассматриваются вопросы, связанные с разработкой приложений использующих систему управления базами данных SQLite. Также в лекции рассказывается о поддерживаемых системах анимации, основных классах, используемых для добавления анимации в приложения, приводятся способы изображения графических объектов в Android. Небольшой раздел лекции посвящен введению в разработку игр, рассмотрены основные принципы разработки игр для смартфонов.

Презентацию к данной лекции можно скачать здесь.

16.1 Введение

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

Современное программирование трудно представить без использования баз данных, рано или поздно в процессе развития приложения появляется осознание необходимости долговременного хранения и обработки структурированной информации. Данная лекция посвящена рассмотрению вопросов, связанных с использованием баз данных SQLite в приложениях, разрабатываемых под Android. Базы данных SQLite являются основой построения рабочей и функциональной программы, в которой необходимо работать с большими объемами структурированной информации.

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

Очень часто мобильные устройства помогают "скоротать время" в очередях, в ожидании транспорта и многих других ситуациях, часто возникающих в современной жизни. Проще всего в такие моменты занять себя несложной игрой, в связи с этим тема разработки игр для мобильных устройств стала довольно популярна в последнее время. Разумеется, разработка игр дело серьезное, но даже отдельному разработчику по силам создать игру, способную увлечь пользователя. В данной теме рассмотрим основные принципы создания игр для смартфонов, в лабораторной работе рассмотрим процесс создания несложной игры.

16.2 Основы работы с базами данных, SQLite

SQLite - небольшая и при этом мощная система управления базами данных. Эта система создана в 2000 году, ее разработчик доктор Ричард Хипп (Dr. Richard Hipp). В настоящее время является одной из самых распространенных SQL-систем управления базами данных в мире. Можно выделить несколько причин такой популярности SQLite: она бесплатная; она маленькая, примерно 150 Кбайт; не требует установки и администрирования. Подробнее см. http://www.sqlite.org.

База данных SQLite - это обычный файл, его можно перемещать и копировать на другую систему (например, с телефона на рабочий компьютер) и она будет отлично работать. Android хранит файл базы данных приложения в папке (см. рис. 16.1.):

data/data/packagename/databases/,
    

где packagename - имя пакета, в котором расположено приложение.

Для доступа к этому файлу необходимо запускать команды SQL, Android с помощью вспомогательных классов и удобных методов скрывает часть деталей, но все таки необходимо иметь хотя бы минимальные знания об SQL, чтобы пользоваться этими инструментами.

Расположение файла базы данных SQLite

увеличить изображение
Рис. 16.1. Расположение файла базы данных SQLite

Обращения к базе данных SQL выполняются посредством запросов, существует три основных вида SQL запросов: DDL, Modification и Query.

  • DDL запросы. Такие запросы используются для создания таблиц. Каждая таблица характеризуется именем и описанием столбцов, которое содержит имя столбца и тип данных. В файле базы данных может быть несколько таблиц.

    Пример запроса для создания таблицы:

    create Table_Name (
    	_id  integer primary key autoincrement,
    	field_name_1 text,
    	field_name_2 text);
          
    Первый столбец обозначен, как primary key (первичный ключ), т. е. уникальное число, которое однозначно идентифицирует строку. Слово autoincrement указывает, что база данных будет автоматически увеличивать значение ключа при добавлении каждой записи, что и обеспечивает его уникальность. Существует договоренность первый столбец всегда называть _id, это не жесткое требование SQLite, однако может понадобиться при использовании контент-провайдера в Android.

    Стоит иметь в виду, что в SQLite, в отличие от многих других баз данных, типы данных столбцов являются лишь подсказкой, т. е. не вызовет никаких нареканий попытка записать строку в столбец, предназначенный для хранения целых чисел или наоборот. Этот факт можно рассматривать, как особенность базы данных, а не как ошибку, на это обращают внимание авторы SQLite.

  • Modification запросы. Такие запросы используются для добавления, изменения или удаления записей.

    Пример запроса на добавление строки:

    insert into Table_Name values(null, value1, value2);
          
    В этом случае значения разместятся в соответствующие столбцы таблицы, первое значение задается для поля _id и равно null, т. к. SQLite вычисляет значение этого поля самостоятельно.

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

    insert into Table_Name(field_name_2, field_name_1)
      values(value2, value1);
          
    В этом случае добавляются значения только в поля field_name_1 и field_name_2, причем изменен порядок следования полей, а вместе с этим и порядок следования значений, иногда это бывает удобно.

    Примеры запросов на изменение строки:

    update Table_Name set Field_Name_1 = value;
          

    поменяет значение столбца Field_Name_1 на value во всей таблице;

    update Table_Name set Field_Name_1 = value where _id = smth;
          
    поменяет значение столбца Field_Name_1 только в той строке, _id которой равен smth.

    Примеры запросов на удаление строк:

    delete from Table_Name;
    delete from Table_Name where Field_Name_1 = smth;
          

    первый запрос удаляет все строки таблицы, второй - только те строки, в которых столбец Field_Name_1 имеет значение smth.

  • Query запросы. Такие запросы позволяют получать выборки из таблицы по различным критериям. Пример запроса:
    select * from Table_Name where (_id = smth);
    select Field_Name_1, Field_Name_2 from Table_Name
    				Field_Name_1 = smth);
          

Первый запрос выводит строку с _id равным smth, второй - выводит два элемента Field_Name_1 и Field_Name_2 строк, в которых Field_Name_1 равен smth.

Вернемся к рассмотрению вопросов, связанных с использованием базы данных SQLite в приложениях под Android. Любая база данных, созданная в приложении доступна любому классу приложения, но недоступна из вне. Чтобы открыть доступ к базе данных другим приложениям необходимо использовать контент-провайдеры (Content Providers).

Для создания и обновления базы данных в Android предусмотрен класс SQLiteOpenHelper. При разработке приложения, работающего с базами данных, необходимо создать класс-наследник от SQLiteOpenHelper, в котором обязательно реализовать методы:

onCreate() - вызывается при первом создании базы данных;
onUpgrade() - вызывается, когда необходимо обновить базу данных.

По желанию можно реализовать метод:

onOpen() - вызывается при открытии базы данных.

В этом же классе имеет смысл объявить строковые константы, в которых определить названия таблиц и столбцов. Полученный класс позаботится об открытии базы данных, если она существует, или о создании ее в противном случае, а так же об обновлении базы данных в случае необходимости.

В Android предусмотрен класс для работы с базой данных SQLite напрямую, этот класс называется SQLiteDatabase и содержит методы:

openDatabase() - позволяет открыть базу данных;
update() - позволяет обновить строки таблицы базы данных;
insert() - позволяет добавлять строки в таблицу базы данных;
delete() - позволяет удалять строки из таблицы базы данных;
query() - позволяет составлять запросы к базе данных;
execSQL() - позволяет выполнять запросы к базе данных.

Для добавления новых строк в таблицу используется класс ContentValues, каждый объект этого класса представляет собой одну строку таблицы и выглядит как ассоциативный массив с именами столбцов и значениями, которые им соответствуют.

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

Для предоставления доступа к данным для других приложений можно использовать контент-провайдеры (ContentProvider). Любая информация, управляемая контент-провайдером адресуется посредством URI:

content://authority/path/id
    

где:

content:// - стандартный требуемый префикс;
authority - имя провайдера, рекомендуется использовать полное квалификационное имя пакета для избежания конфликта имен;
path - виртуальная папка внутри провайдера, которая определяет вид запрашиваемых данных;
id - первичный ключ отдельной запрошенной записи, для запроса всех записей определенного типа этот параметр не указывается.

Контент-провайдеры поддерживают стандартный синтаксис запросов для чтения, изменения, вставки и удаления данных.

Подробнее работу с SQLite базами данных в приложениях под Android рассмотрим в первой части лабораторной работы в этой теме.

Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.