Основы создания приложений и работы с базами данных мобильной системы android

Автор: Пользователь скрыл имя, 24 Октября 2013 в 09:18, курсовая работа

Краткое описание

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

Оглавление

Введение……………………………………………………………………………2
Введение в Android……………………………………………….……….......3
. История создания ОС………………………………………..……….…...3
1.2. Основные сведения о системе Android…………………….…..….…….4
1.3. Базовые компоненты Android…………………………………….....…...6
2. Разработка приложений для Android……………………………..…….…….7
2.1. Основные виды приложений……………………………………….……7
2.2. Изучение структуры приложения на основе программы To-Do-List.…8
2.3. Файл AndroidManifest.xml………………………………………………..11
2.3.1. Описание файла…………………………………………..………11
2.3.2. Конфигурирование основных настроек файла…………………12
2.4. Класс Application в Android……………………………………………..14
2.5. Активности в Android……………………………………………………16
3. Работа с базами данных и источниками данных…………………………..19
3.1. Базы данных SQLite……………………………………………………..19
3.1.1. Вставка, удаление и обновление строк в таблицах SQLite……24
3.2. Источники данных Android и работа с ними………………………….25
3.2.1. Основные сведения и создание источника данных……………25
3.2.2. Использование источников данных…………………………….28
Заключение……………………………………………………………………….31
Литература………………………………………………………………………..32

Файлы: 1 файл

Курсовик.doc

— 246.50 Кб (Скачать)

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

 

// Создайте новую строку  со значениями для вставки.

ContentValues newValues = new ContentValues();

// Задайте значения для каждой строки.

newValues.put(COLUMN_NAME, newValue);

[ ... Повторите для каждого  столбца ... ]

// Вставьте строку в вашу базу данных.

myDatabase.insert(DATABASE_TABLE, null, newValues);

 

Обновление строк также происходит с помощью класса ContentValues. Нужно создать новый объект ContentValues, используя метод put для вставки значений в каждый столбец, который необходимо обновить. Вызываем метод update в контексте базы данных, передаём ему имя таблицы, обновленный объект ContentValues и оператор WHERE, указывающий на строку (строки), которую нужно обновить.

// Определите содержимое  обновленной строки.

ContentValues updatedValues = new ContentValues();

// Назначьте значения  для каждой строки.

newValues.put(COLUMN_NAME, newValue);

[ ... Повторите для каждого  столбца ... ]

String where = KEY_ID + "=" + rowId;

// Обновите строку  с указанным индексом, используя новые значения.

myDatabase.update(DATABASE_TABLE, newValues, where, null);

 

Чтобы удалить строку, просто вызывается метод delete в контексте базы данных, указав имя таблицы и оператор WHERE. В результате получаем строки, которые хотите удалить:

 

myDatabase.delete(DATABASE_TABLE, KEY_ID + "=" + rowId, null);

3.2. Источники  данных Android и работа с ними

 

3.2.1. Основные сведения и создание источника данных

 

Источники данных предоставляют интерфейс для публикации и потребления данных, основанный на простой адресной модели URI, используя схему content://. Этот механизм позволяет отделить логику приложения от данных, делая программы нечувствительными к источникам, из которых поступает информация, путем скрытия базового источника с данными. Общие Источники данных могут использоваться для получения результатов запросов, обновления или удаления существующих записей, а также для добавления новых. Любое приложение с соответствующими полномочиями может добавлять, удалять или изменять данные, принадлежащие другому приложению, включая стандартные базы данных Android.

Многие стандартные базы данных доступны в качестве Источников данных

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

Для создания нового Источника данных наследуйте абстрактный класс ContentProvider. Переопределите метод onCreate, чтобы создать (и инициализировать) базовый источник, который необходимо   опубликовать.

 

import android.content.*;

import android.database.Cursor;

import android.net.Uri;

import android.database.SQLException;

public class MyProvider extends ContentProvider {

@Override

public boolean onCreate() {

// TODO: Создать  базу данных, с которой будет  работать данный класс.

return true;

}

}

 

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

 

content://com.<CompanyName>.provider.<ApplicationName>/<DataPath>

 

Например:

 

content://com.paad.provider.myapp/elements

 

Пути URI могут представляться двумя  способами. URI, показанный выше, — это  запрос ко всем значениям определенного  типа (в данным случае все элементы).

Чтобы получить запрос к конкретной строке, в конце нужно указать  ее номер (в данном случае пятый элемент).

 

content://com.paad.provider.myapp/elements/5

 

Поддержка обоих видов доступа  к  Источнику данных — правильное решение. Самый простой способ обеспечить ее — использовать UriMatcher. Необходимо создать и настроить UriMatcher, чтобы анализировать пути URI и распознавать их виды. Это чрезвычайно важно при обработке запросов из класса ContentResolver.

 

Использование UriMatcher для обработки одиночных или множественных запросов к Источнику данных:

 

public class MyProvider extends ContentProvider {

private static final String myURI = "content://com.paad.provider.myapp/

items";

public static final Uri CONTENT_URI = Uri.parse(myURI);

@Override

public boolean onCreate() {

// TODO: Создать базу  данных, с которой будет работать  данный класс.

return true;

}

// Создайте константы  для распознавания разных запросов.

private static final int ALLROWS = 1;

private static final int SINGLE_ROW = 2;

 

private static final UriMatcher uriMatcher;

 

// Заполните данными  объект UriMatcher. URI заканчивается на  ‘items’,

// когда осуществляется запрос ко всем элементам, и на ‘items/[rowID]’,

// когда идет запрос  к единственной строке.

static {

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

uriMatcher.addURI("com.paad.provider.myApp", "items", ALLROWS);

uriMatcher.addURI("com.paad.provider.myApp", "items/#", SINGLE_ROW);

}}

Есть возможность упростить доступ к запросам и транзакциям в вашем Источнике данных, реализовав методы delete, insert, update и query.

Эти методы — интерфейс, используемый объектом ContentResolver для доступа к исходным данным. Они позволяют приложениям обмениваться данными в любой точке и не требуют разных интерфейсов для каждого источника данных.

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

Ниже описан каркас для реализации запросов и транзакций внутри Источника данных. Здесь объект UriMatcher задействуется для уточнения этих запросов и транзакций.

 

@Override

public Cursor query(Uri uri,

String[] projection,

String selection,

String[] selectionArgs,

String sort) {

// Если это запрос  для получения строки, ограничьте  результат одной строкой.

switch (uriMatcher.match(uri)) {

case SINGLE_ROW :

// TODO: Изменять выборку,  в зависимости от идентификатора  строки,  где: //rowNumber = uri.getPathSegments().get(1));

}

return null;

}

 

 

@Override

public Uri insert(Uri _uri, ContentValues _initialValues) {

long rowID = [ ... Добавляем  новый элемент ... ]

// Верните путь URI к  последнему добавленному элементу.

if (rowID > 0) { 

return ContentUris.withAppendedId(CONTENT_URI, rowID);

}

throw new SQLException("Failed to add new item into " + _uri);

}

 

 

@Override

public int delete(Uri uri, String where, String[] whereArgs) {

switch (uriMatcher.match(uri)) {

case ALLROWS:

case SINGLE_ROW:

default: throw new IllegalArgumentException("Unsupported URI:" + uri);

}

}

 

 

 

 

@Override

public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {

switch (uriMatcher.match(uri)) {

case ALLROWS:

case SINGLE_ROW:

default: throw new IllegalArgumentException("Unsupported URI:" + uri);

}

}

 

@Override

public String getType(Uri _uri) {

switch (uriMatcher.match(_uri)) {

case ALLROWS: return "vnd.paad.cursor.dir/myprovidercontent";

case SINGLE_ROW: return "vnd.paad.cursor.item/myprovidercontent";

default: throw new IllegalArgumentException("Unsupported URI: " + _uri);

}

}

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

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

После создания Источника данных, его нужно добавить в манифест приложения. Нужно воспользоваться тегом authorities, чтобы указать базовый путь URI, как показано в следующем фрагменте кода XML:

 

<provider android:name="MyProvider"

android:authorities="com.paad.provider.myapp"/>

 

 

3.2.2. Использование  источников данных

 

Запросы к Источникам данных весьма похожи на запросы к базам данных. Как и в случае с базами, результат  приходит в виде результирующего объекта Cursor.

Можно извлекать значения из результирующего Cursor с помощью тех же методов, о которых шла речь в разделе 3.1. Используя метод query, принадлежащий объекту ContentResolver, нужно передать ему:

• путь URI Источника данных, к которому требуется выполнить запрос;

• проекцию, содержащую список столбцов, которые хотите включить в результирующий набор данных;

• оператор WHERE, определяющий строки для возвращения

• массив строк, выступающих в роли аргументов для оператора SELECT,

которые должны заменить маски ≪?≫ в операторе WHERE;

• строку, описывающую порядок возвращения результирующих строк.

 

ContentResolver – класс экземпляр которого  включен в объект Context. Доступ к этому классу обеспечивает метод getContentResolver.

 

ContentResolver cr = getContentResolver();

 

ContentResolver применяет методы для  изменения данных и выполнения  запросов к Источникам данных. Каждый метод принимает URI, который указывает на то, с каким именно Источником данных нужно работать.

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

 

Создание запросов к Источнику данных с помощью  ContentResolver:

ContentResolver cr = getContentResolver();

// Верните все строки

Cursor allRows = cr.query(MyProvider.CONTENT_URI, null, null, null, null);

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

String where = KEY_COL3 + "=" + requiredValue;

String order = KEY_COL5;

Cursor someRows = cr.query(MyProvider.CONTENT_URI, null, where, null,

order);

 

Для передачи транзакций к Источникам данных, используйте методы delete, update и insert, принадлежащие объекту ContentResolver.

Класс ContentResolver предлагает два метода вставки новых записей в Источник данных — insert и bulkInsert. Оба принимают в качестве параметра путь URI, описывающий тип элементов, которые вы добавляете, но первый метод — одиночный объект ContentValues, а второй — массив этих объектов. Обычный метод insert вернет путь URI к только что добавленной записи, а bulkInsert вернет количество записей, которые были успешно добавлены:

 

// Получите объект ContentResolver

ContentResolver cr = getContentResolver();

// Создайте новую строку  со значениями, которые вы хотите  вставить.

ContentValues newValues = new ContentValues();

// Назначьте значения для каждой строки.

newValues.put(COLUMN_NAME, newValue);

[ ... Повторите для каждого столбца ... ]

Uri myRowUri = cr.insert(MyProvider.CONTENT_URI, newValues);

// Создайте новую строку  со значениями, которые вы хотите  вставить.

ContentValues[] valueArray = new ContentValues[5];

// TODO: Создать массив новых строк

int count = cr.bulkInsert(MyProvider.CONTENT_URI, valueArray);

 

Чтобы удалить одиночную запись, необходимо вызвать метод delete из объекта ContentResolver, передав ему путь URI-той строки, которую хотите убрать. Кроме этого можно указать оператор WHERE для удаления нескольких строк:

 

ContentResolver cr = getContentResolver();

// Удалите конкретную строку.

cr.delete(myRowUri, null, null);

// Удалите первых пять  строк.

String where = "_id < 5";

cr.delete(MyProvider.CONTENT_URI, where, null);

 

Строки в Источнике данных обновляются  с помощью метода update, принадлежащего ContentResolver. Данный метод принимает  в качестве параметров путь URI, ссылающийся  на нужный Источник данных, объект ContentValues, связывающий имена столбцов с обновленными данными, а также оператор WHERE, с помощью которого можно выбрать строки для обновления. В процессе каждая строка, подходящая под описание оператора WHERE, обновляется, используя переданный объект ContentValues. При этом возвращается количество успешных обновлений:

 

// Создайте новую строку  со значениями, которые вы хотите  вставить.

ContentValues newValues = new ContentValues();

// Создайте ассоциативный  массив, который определяет, какой  столбец

// вы хотите обновить, и какие значения ему будут присвоены.

newValues.put(COLUMN_NAME, newValue);

// Примените изменения  к первым пяти строкам.

String where = "_id < 5";

getContentResolver().update(MyProvider.CONTENT_URI, newValues, where,

                null);

 

Чтобы вставить файл в Источник данных или получить доступ к сохраненному, используйте методы openOutputStream и openInputStream соответственно.

Добавление в источник данных:

 

// Вставьте новую строку  в ваш Источник, получите ее  уникальный путь URI.

Uri uri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues);

 

try {

// Откройте исходящий  поток, используя URI новой строки.

OutputStream outStream = getContentResolver().openOutputStream(uri);

// Сожмите изображение  и сохраните его в Источнике  данных.

sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);

}

catch (FileNotFoundException e) { }

 

 

Заключение

 

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

Поставленная задача решена полностью.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Литература

 

  1. Android Developers [Электронный ресурс]. – Режим доступа:                      http://developer.android.com, свободный. – Загл. с экрана. – Яз. Английский
  2. Рето Майер Android 2: Программирование приложений для планшетных компьютеров и смартфонов. – М: Эксмо, 2011.
  3. Голощапов А. Л. Google Android. Программирование для мобильных устройств. – СПб: БХВ-Петербург, 2011.
  4. Habrahabr [Электронные ресурс]. – Режим доступа:

http://habrahabr.ru/, свободный. – Язык  русский.

5.ДэрсиЛ., КондерШ. Android за 24 часа —М.: Рид Групп, 2011

6.Хашими С., Комантинени С. Разработка приложений для Android.

 – СПб.: Питер,2011.

 

 


Информация о работе Основы создания приложений и работы с базами данных мобильной системы android