Android Lesson 14. Базы данных в Android.

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

SQLite.

Мы не будем в этой статье уделять много внимания самим базам данных, теории и языку SQL. Это тема отдельно статьи. Напомним лишь о том, что различных СУБД (Система Управления Базами Данных) существует большое множество и при написании приложения у нас всегда есть некий выбор. Но сейчас мы говорим о мобильном приложении, в котором база данных может использоваться для временного хранения не слишком большого объема данных, например, для кеширования.

В состав Android входит легковесная СУБД с открытым исходным кодом – SQLite. Она представляет собой отдельную библиотеку, легко встраиваемую в ваш проект. Все, что вам нужно для работы с ней в Android – это:

 

1). Создать класс-наследник SQLiteOpenHelper – он содержит два необходимых метода:

onCreate() – вызывается при создании БД и onUpgrade() – вызывается в случае несовпадения версий (обновления). Также этот класс предоставляет вам доступ к методам getWritableDatabase() и getReadableDatabase() для доступа к БД для записи или для чтения соответственно. Эти методы возвращают экзмепляры классов SQLiteDatabase, представляющие собственно базу данных.

2). Научиться работать с методами класса SQLiteDatabase. Основных методов четыре: insert(), update(), delete() и execSQL(). Последний метод принимает в качестве параметра строку,содержащую пользовательский SQL-запрос.

 

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

Теперь приступим к реализации наследника класса SQLiteOpenHelper и опишем несколько констант:

Данные константы описывают название базы данных, текущую версию БД (используется для обновления содержимого БД) и названия таблицы и ее полей. Теперь необходимо переопределить методы onCreate() и onUpgrade().

Теперь немного пояснений. Метод onCreate() вызывается при создании базы данных. В нем мы создаем SQL-запрос для создания таблицы и выполняем его, передав текст запроса в качестве параметра методу execSQL() класса SQLiteDatabase. Далее мы заполняем базу данных с использованием класса ContentValues,  в который мы поочередно добавляем записи. Затем все данные, содержащиеся в переменной cv, передаются в метод insert() для вставки данных в таблицу. Метод onUpgrade() будет вызван в случае изменения(увеличения) номера версии БД.

 

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

Разберем поподробнее. В конструкторе класса DBConnection мы создаем новый экземпляр класса MySQLiteOpenHelper для дальнейшей работы с БД. Помимо этого наш класс пока содержит только один метод – getData(), который возвращает нам список, состоящий из экземпляров класса Group.

Первым делом необходимо открыть БД для чтения. С помощью метода getReadableDatabase() мы получим экземпляр класса SQLiteDatabase. Далее мы вызываем метод query() для чтения данных, имеющий целый ряд параметров вроде условий выборки и порядка группировки элементов. В этой статье мы их не используем, поэтому все они имеют значение null. Первым параметром передается имя таблицы, по которой мы осуществляем выборку.

Метод query() вернет нам экземпляр класса Cursor, представляющего результат поиска по БД. Если объект класса Cursor содержит хотя бы одну запись, то мы получаем индексы каждого столбца в таблице методом getColumnIndex(), а затем и сами значения с помощью методов getString() и getInt(). Эти значения используем для создания нового объекта класса Group и добавления его в предварительно созданный список ArrayList. Все. Теперь это нужно отобразить. Здесь по сравнению с предыдущим уроком почти ничего не изменилось.

Так как в нашем списке мы будем отображать только названия групп, которые нужно передать в конструктор нашего адаптера, мы скопировали их в строковый массив. В следующем уроке мы немного изменим наше представление и создадим собственный адаптер. Давайте запустим проект. Если вы все сделали правильно, то у вас должно получиться нечто вроде этого:

groups

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

Для этого создадим еще одну активность – GroupActivity и разметку к ней. В редакторе наш макет должен выглядеть примерно следующим образом:

group

Для улучшения интерфейса попробуйте изменять свойства элементов, их размеры, шрифт, внутренние и внешние отступы.

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

И еще: не забудьте прописать новую созданную активность в манифесте!

Теперь установите данный макет для отображения методом setContentView() и получите ссылки на текстовые метки, которые будем заполнять в зависимости от нажатого элемента списка:

Также здесь нам понадобится доступ к БД, чтобы получить нужные нам данные. И вы, конечно же, заметили переменную position, которая передается в качестве параметра из первой активности. Как это делается и как выполнить переход. Это несложно. Для начала добавим обработчик нажатий у нашего ListView в главной активности:

В методе он ItemClick() выполним переход. Для перехода на другую активность необходимо создать экземпляр класса Intent (намерение), в конструкторе которого мы указываем класс активности, на которую переходим. Метод putExtra() как раз и используется для обмена данными с другой активностью. Таким образом мы сообщаем второй активности, что пользователь выбрал именно этот элемент списка. Теперь по этому номеру мы сможем отобразить правильные данные. Для этого добавьте следующий код в GroupActivity:

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

groups2

Итак, в этом уроке мы познакомились с основами использования Баз Данных в проектах под ОС Android, научились создавать новые активности и выполнять между ними переходы, а также передавать информацию между активностями. Благодаря этому вы уже можете создавать свои, интересные, пусть и несложные проекты. Ну а мы подготовим для вас массу нового интересного материала. А следующая статья будет посвящена созданию своих, кастомных адаптеров. Следите за новостями!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *