Автор: Пользователь скрыл имя, 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
Для создания новой строки понадобится объект ContentValues, точнее, его метод put, чтобы обеспечить данными каждый столбец. Вставляем новую строку, передавая в метод insert, вызванный в контексте нужной нам базы данных, имя таблицы и объект ContentValues:
// Создайте новую строку со значениями для вставки.
ContentValues newValues = new ContentValues();
// Задайте значения для каждой строки.
newValues.put(COLUMN_NAME, newValue);
[ ... Повторите для каждого столбца ... ]
// Вставьте строку в вашу базу данных.
myDatabase.insert(DATABASE_
Обновление строк также
// Определите содержимое обновленной строки.
ContentValues updatedValues = new ContentValues();
// Назначьте значения для каждой строки.
newValues.put(COLUMN_NAME, newValue);
[ ... Повторите для каждого столбца ... ]
String where = KEY_ID + "=" + rowId;
// Обновите строку с указанным индексом, используя новые значения.
myDatabase.update(DATABASE_
Чтобы удалить строку, просто вызывается метод delete в контексте базы данных, указав имя таблицы и оператор WHERE. В результате получаем строки, которые хотите удалить:
myDatabase.delete(DATABASE_
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>.
Например:
content://com.paad.provider.
Пути URI могут представляться двумя способами. URI, показанный выше, — это запрос ко всем значениям определенного типа (в данным случае все элементы).
Чтобы получить запрос к конкретной строке, в конце нужно указать ее номер (в данном случае пятый элемент).
content://com.paad.provider.
Поддержка обоих видов доступа к Источнику данных — правильное решение. Самый простой способ обеспечить ее — использовать UriMatcher. Необходимо создать и настроить UriMatcher, чтобы анализировать пути URI и распознавать их виды. Это чрезвычайно важно при обработке запросов из класса ContentResolver.
Использование UriMatcher для обработки одиночных или множественных запросов к Источнику данных:
public class MyProvider extends ContentProvider {
private static final String myURI = "content://com.paad.provider.
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_
uriMatcher.addURI("com.paad.
uriMatcher.addURI("com.paad.
}}
Есть возможность упростить доступ к запросам и транзакциям в вашем Источнике данных, реализовав методы 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: Изменять выборку,
в зависимости от
}
return null;
}
@Override
public Uri insert(Uri _uri, ContentValues _initialValues) {
long rowID = [ ... Добавляем новый элемент ... ]
// Верните путь URI к
последнему добавленному
if (rowID > 0) {
return ContentUris.withAppendedId(
}
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("
}
}
@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("
}
}
@Override
public String getType(Uri _uri) {
switch (uriMatcher.match(_uri)) {
case ALLROWS: return "vnd.paad.cursor.dir/
case SINGLE_ROW: return "vnd.paad.cursor.item/
default: throw new IllegalArgumentException("
}
}
В последнем листинге мы переопределяем метод getType, чтобы он возвращал корректный тип MIME, основываясь на переданном URI. Тип MIME – это тип с помощью которого распознается тип данных, возвращенный источником данных.
Мы переопределили метод getType так, чтобы он возвращал уникальную строку, описывающую наш тип данных. Возвращаемый тип должен иметь две формы: одну для одиночной записи, а другую для всех записей сразу.
После создания Источника данных, его нужно добавить в манифест приложения. Нужно воспользоваться тегом authorities, чтобы указать базовый путь URI, как показано в следующем фрагменте кода XML:
<provider android:name="MyProvider"
android:authorities="com.paad.
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_
// Верните все столбцы для строк, в которых третий столбец равен заданному //значению. Строки отсортированы по пятому столбцу.
String where = KEY_COL3 + "=" + requiredValue;
String order = KEY_COL5;
Cursor someRows = cr.query(MyProvider.CONTENT_
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_
// Создайте новую строку со значениями, которые вы хотите вставить.
ContentValues[] valueArray = new ContentValues[5];
// TODO: Создать массив новых строк
int count = cr.bulkInsert(MyProvider.
Чтобы удалить одиночную запись, необходимо вызвать метод delete из объекта ContentResolver, передав ему путь URI-той строки, которую хотите убрать. Кроме этого можно указать оператор WHERE для удаления нескольких строк:
ContentResolver cr = getContentResolver();
// Удалите конкретную строку.
cr.delete(myRowUri, null, null);
// Удалите первых пять строк.
String where = "_id < 5";
cr.delete(MyProvider.CONTENT_
Строки в Источнике данных обновляются с помощью метода update, принадлежащего ContentResolver. Данный метод принимает в качестве параметров путь URI, ссылающийся на нужный Источник данных, объект ContentValues, связывающий имена столбцов с обновленными данными, а также оператор WHERE, с помощью которого можно выбрать строки для обновления. В процессе каждая строка, подходящая под описание оператора WHERE, обновляется, используя переданный объект ContentValues. При этом возвращается количество успешных обновлений:
// Создайте новую строку со значениями, которые вы хотите вставить.
ContentValues newValues = new ContentValues();
// Создайте ассоциативный массив, который определяет, какой столбец
// вы хотите обновить, и какие значения ему будут присвоены.
newValues.put(COLUMN_NAME, newValue);
// Примените изменения к первым пяти строкам.
String where = "_id < 5";
getContentResolver().update(
null);
Чтобы вставить файл в Источник данных или получить доступ к сохраненному, используйте методы openOutputStream и openInputStream соответственно.
Добавление в источник данных:
// Вставьте новую строку в ваш Источник, получите ее уникальный путь URI.
Uri uri = getContentResolver().insert(
try {
// Откройте исходящий поток, используя URI новой строки.
OutputStream outStream = getContentResolver().
// Сожмите изображение и сохраните его в Источнике данных.
sourceBitmap.compress(Bitmap.
}
catch (FileNotFoundException e) { }
Заключение
В ходе работы были получены необходимые знания для работы с Android и разработкой программного обеспечения для нее. Я смог в полной мере оценить все достоинства и недостатки этой платформы. Навыки полученные при написании работы в будущем помогут мне разрабатывать, совершенствовать приложения для Android.
Поставленная задача решена полностью.
Литература
http://habrahabr.ru/, свободный. – Язык русский.
5.ДэрсиЛ., КондерШ. Android за 24 часа —М.: Рид Групп, 2011
6.Хашими С., Комантинени С. Разработка приложений для Android.
– СПб.: Питер,2011.
Информация о работе Основы создания приложений и работы с базами данных мобильной системы android