Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
SQLite и Android

SQLite в Android
ContentProvider
Что такое SQLite?
●

База данных с открытым исходным кодом.

11:02

2 из 80
Что такое SQLite?
●

База данных с открытым исходным кодом.

●

Поддерживает SQL, транзакции и процедуры.

11:02

3 из 80
Что такое SQLite?
●

База данных с открытым исходным кодом.

●

Поддерживает SQL, транзакции и процедуры.

●

Не требует много ресурсов (примерно 250 кБ памяти).

11:02

4 из 80
Что такое SQLite?
●

База данных с открытым исходным кодом.

●

Поддерживает SQL, транзакции и процедуры.

●

Не требует много ресурсов (примерно 250 кБ памяти).

●

Является встраиваемой библитекой.

11:02

5 из 80
Что такое SQLite?
●

База данных с открытым исходным кодом.

●

Поддерживает SQL, транзакции и процедуры.

●

Не требует много ресурсов (примерно 250 кБ памяти).

●

Является встраиваемой библитекой.

●

3 основных типа данных: TEXT, INTEGER, REAL.

11:02

6 из 80
Что такое SQLite?
●

База данных с открытым исходным кодом.

●

Поддерживает SQL, транзакции и процедуры.

●

Не требует много ресурсов (примерно 250 кБ памяти).

●

Является встраиваемой библитекой.

●

3 основных типа данных: TEXT, INTEGER, REAL.

●

Всё содержимое БД храниться в одном файле.

11:02

7 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

11:02

8 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

●

Не требуется установка или настройка БД.

11:02

9 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

●

Не требуется установка или настройка БД.

●

Необходимо определить только процедуры создания и
обновления БД.

11:02

10 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

●

Не требуется установка или настройка БД.

●

●

Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.

11:02

11 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

●

Не требуется установка или настройка БД.

●

●

●

Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.
Желательно выполнять запросы асинхронно (в отдельном
потоке).

11:02

12 из 80
Особенности SQLite в Android
●

SQLite интегрирован во все Android устройства.

●

Не требуется установка или настройка БД.

●

●

●

●

Необходимо определить только процедуры создания и
обновления БД.
Выполняется обращение к файлам устройства.
Желательно выполнять запросы асинхронно (в отдельном
потоке).
Файл БД храниться в каталоге приложения:
DATA/data/ИМЯ_ПРИЛОЖЕНИЯ/databases/ИМЯ_ФАЙЛА
DATA/data/com.bstu.test/databases/test.db

11:02

13 из 80
Создание и обновление БД
●

Создать класс-наследник класса SQLiteOpenHelper.

11:02

14 из 80
Создание и обновление БД
●

Создать класс-наследник класса SQLiteOpenHelper.

●

Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.

11:02

15 из 80
Создание и обновление БД
●

Создать класс-наследник класса SQLiteOpenHelper.

●

Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.

●

Переопределить методы onCreate() и onUpgrade().

11:02

16 из 80
Создание и обновление БД
●

Создать класс-наследник класса SQLiteOpenHelper.

●

Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.

●

Переопределить методы onCreate() и onUpgrade().

●

Параметром методов является класс SQLiteDatabase.

11:02

17 из 80
Создание и обновление БД
●

Создать класс-наследник класса SQLiteOpenHelper.

●

Вызвать конструктор родителя с параметрами:
имя_бд и версия_бд.

●

Переопределить методы onCreate() и onUpgrade().

●

Параметром методов является класс SQLiteDatabase.

●

getReadableDatabase() и getWritableDatabase()
предоставляют доступ к БД.

11:02

18 из 80
Класс SQLiteDatabase
●

Базовый класс для работы с БД SQLite.

11:02

19 из 80
Класс SQLiteDatabase
●

●

Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.

11:02

20 из 80
Класс SQLiteDatabase
●

●

●

Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.
insert(), update(), delete().

11:02

21 из 80
Класс SQLiteDatabase
●

●

Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.

●

insert(), update(), delete().

●

execSQL().

11:02

22 из 80
Класс SQLiteDatabase
●

●

Базовый класс для работы с БД SQLite.
Предоставляет методы для выполнения запросов к
БД, открытия/обновления/закрытия БД.

●

insert(), update(), delete().

●

execSQL().

●

Запросы к БД выполняются через
–

rawQuery()

–

query()

–

SQLiteQueryBuilder класс

11:02

23 из 80
Примеры запросов к БД
●

rawQuery():
getReadableDatabase().rawQuery("select * from todo
where _id = ?", new String[] { id });

●

query():
database.query(DATABSE_TABLE, new String[]
{ KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY },
null, null, null, null, null);

11:02

24 из 80
Параметры метода query()
Параметр
String dbName
String[]
columnNames
String
whereClause
String[]
selectionArgs
String[] groupBy
String[] having
String[] orderBy
11:02

Описание
Название таблицы, для которой
выполняется запрос.
Список столбцов, которые нужно вернуть.
null — все столбцы.
Раздел where sql-запроса, фильтрует
результат. null — все данные.
Знаки «?» в разделе where заменяются
значениями из массива selectionArgs.
Определяет группировку столбцов.
Фильтр групп
Столбцы, по которым данные сортируются
25 из 80
Класс ContentValues
●

Определяет пары ключ/значение.

11:02

26 из 80
Класс ContentValues
●

Определяет пары ключ/значение.

●

Ключ — имя столбца таблицы.

11:02

27 из 80
Класс ContentValues
●

Определяет пары ключ/значение.

●

Ключ — имя столбца таблицы.

●

Значение — содержимое записи в данном столбце.

11:02

28 из 80
Класс ContentValues
●

Определяет пары ключ/значение.

●

Ключ — имя столбца таблицы.

●

Значение — содержимое записи в данном столбце.

●

Используется для добавления/обновления данных в
БД.

11:02

29 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

11:02

30 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

11:02

31 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

●

getCount().

11:02

32 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

●

getCount().

●

moveToFirst(), moveToNext(), isAfterLast().

11:02

33 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

●

getCount().

●

moveToFirst(), moveToNext(), isAfterLast().

●

Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).

11:02

34 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

●

getCount().

●

moveToFirst(), moveToNext(), isAfterLast().

●

●

Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).
getColumnIndex(columnName)

11:02

35 из 80
Класс Cursor
●

Запрос возвращает объект типа Cursor.

●

Cursor указывает на одну строку результата.

●

getCount().

●

moveToFirst(), moveToNext(), isAfterLast().

●

Типизированные методы get*() для извлечения данных
(getLong(columnIndex), getString(columnIndex)).

●

getColumnIndex(columnName)

●

close()

11:02

36 из 80
ContentProvider в Android

ContentProvider
Что такое ContentProvider?
●

Позволяет приложениям получать доступ к
структурированным данным.

11:02

38 из 80
Что такое ContentProvider?
●

●

Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).

11:02

39 из 80
Что такое ContentProvider?
●

●

●

Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).
Должен быть объявлен в файле AndroidManifest.xml

11:02

40 из 80
Что такое ContentProvider?
●

●

●

●

Позволяет приложениям получать доступ к
структурированным данным.
Помогает приложениям «делиться» своими данными с
другими приложениями (напр., получить доступ к
списку контактов).
Должен быть объявлен в файле AndroidManifest.xml
Собственный ContentProvider нужен только для
предоставления «своих» данных другим приложениям

11:02

41 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

11:02

42 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

●

URI передается объекту ContentResolver.

11:02

43 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

●

URI передается объекту ContentResolver.

●

URI состоит из имени ContentProvider (authority) и
имени таблицы (path).

11:02

44 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

●

URI передается объекту ContentResolver.

●

URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test

11:02

45 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

●

URI передается объекту ContentResolver.

●

URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test

●

content:// - схема данных.

11:02

46 из 80
Доступ к ContentProvider
●

Доступ к ContentProvider осуществляется по URI.

●

URI передается объекту ContentResolver.

●

URI состоит из имени ContentProvider (authority) и
имени таблицы (path).
content://com.bstu.test/test

●

content:// - схема данных.

// Запрашивает пользовательский словарь и возвращает данные
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI,// URI данных в таблице слов
mProjection,
// Столбцы, которые нужно вернуть
mSelectionClause
// Критерий отбора (where)
mSelectionArgs,
// Аргументы отбора
mSortOrder);
// Порядок сортировки строк
11:02

47 из 80
Реализация собственного
ContentProvider
●

Реализовать класс-наследник от ContentProvider.

11:02

48 из 80
Реализация собственного
ContentProvider
●

Реализовать класс-наследник от ContentProvider.

●

Объявить в AndroidManifest.xml.
<provider
android:authorities="com.bstu.test"
android:name=".MyTestContentProvider"
android:exported="true" >
</provider>

11:02

49 из 80
Реализация собственного
ContentProvider
●

Реализовать класс-наследник от ContentProvider.

●

Объявить в AndroidManifest.xml.

●

Реализовать методы
–

query() - возвращает Cursor

–

insert()

–

update()

–

delete()

–

getType()

–

onCreate()

11:02

50 из 80
Реализация собственного
ContentProvider
●

Реализовать класс-наследник от ContentProvider.

●

Объявить в AndroidManifest.xml.

●

Реализовать методы
–

query() - возвращает Cursor

–

insert()

–

update()

–

delete()

–

getType()

–

onCreate()

11:02

UnsupportedOperationException()
51 из 80
Безопасность ContentProvider
●

android:exported="true|false"

11:02

52 из 80
Безопасность ContentProvider
●

android:exported="true|false"

●

Необходимо следить за потоко-безопасностью.

11:02

53 из 80
Безопасность ContentProvider
●

android:exported="true|false"

●

Необходимо следить за потоко-безопасностью.

●

Ключевое слово synchronized.

11:02

54 из 80
Безопасность ContentProvider
●

android:exported="true|false"

●

Необходимо следить за потоко-безопасностью.

●

Ключевое слово synchronized.

●

android:multiprocess="true".

11:02

55 из 80
Безопасность ContentProvider
●

android:exported="true|false"

●

Необходимо следить за потоко-безопасностью.

●

Ключевое слово synchronized.

●

android:multiprocess="true".
–

11:02

создает объект ContentProvider в каждом
запросившем процессе;

56 из 80
Безопасность ContentProvider
●

android:exported="true|false"

●

Необходимо следить за потоко-безопасностью.

●

Ключевое слово synchronized.

●

android:multiprocess="true".
–

создает объект ContentProvider в каждом
запросившем процессе;

–

нет необходимости в межпроцессорном обмене
(IPC).

11:02

57 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

11:02

58 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

●

Обновляет данные при из изменении.

11:02

59 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

●

Обновляет данные при из изменении.

●

Сохраняет данные при изменении конфигурации.

11:02

60 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

●

Обновляет данные при из изменении.

●

Сохраняет данные при изменении конфигурации.

●

Может кэшировать данные.

11:02

61 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

●

Обновляет данные при из изменении.

●

Сохраняет данные при изменении конфигурации.

●

Может кэшировать данные.

●

Впервые появились в Android 3.0.

11:02

62 из 80
Класс Loader
●

Позволяет асинхронно загружать данные в activity.

●

Обновляет данные при из изменении.

●

Сохраняет данные при изменении конфигурации.

●

Может кэшировать данные.

●

Впервые появились в Android 3.0.

●

Совместим вниз до Android 1.6 (Android support library)

11:02

63 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

11:02

64 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

11:02

65 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);

11:02

66 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);
–

11:02

уникальный ID;

67 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);
–

уникальный ID;

–

Bundle, для передачи каких-либо данных;

11:02

68 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);
–

уникальный ID;

–

Bundle, для передачи каких-либо данных;

–

класс реализующий интерфейс
LoaderManager.LoaderCallbacks (обычно activity).

11:02

69 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);

●

Создание происходит в callback-методе
onCreateLoader().

11:02

70 из 80
Реализация Loader
●

Реализовать класс-наследник от AsyncTaskLoader.

●

LoaderManager управляет объектами типа Loader.

●

Получения Loader:
getLoaderManager().initLoader(0, null, this);

●

●

Создание происходит в callback-методе
onCreateLoader().
После завершения загрузки вызывается
onLoadFinished().

11:02

71 из 80
SQLite и CursorLoader
●

CursorLoader — реализации Loader для БД SQLite.

11:02

72 из 80
SQLite и CursorLoader
●

●

CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.

11:02

73 из 80
SQLite и CursorLoader
●

●

●

CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.
Если Cursor требует обновления, вызывается метод
onLoaderReset().

11:02

74 из 80
SQLite и CursorLoader
●

●

●

●

CursorLoader — реализации Loader для БД SQLite.
Выполняет загрузку данных в фоне, не блокируя поток
приложения.
Если Cursor требует обновления, вызывается метод
onLoaderReset().
Переподключает Cursor при изменении конфигурации.

11:02

75 из 80
Доступ к SQLite БД через shell
●

БД SQLite храниться в одном файле.

11:02

76 из 80
Доступ к SQLite БД через shell
●

БД SQLite храниться в одном файле.

●

Доступен в эмуляторе и устройствах с правами root.

11:02

77 из 80
Доступ к SQLite БД через shell
●

БД SQLite храниться в одном файле.

●

Доступен в эмуляторе и устройствах с правами root.

●

adb shell — подключение к устройству

11:02

78 из 80
Доступ к SQLite БД через shell
●

БД SQLite храниться в одном файле.

●

Доступен в эмуляторе и устройствах с правами root.

●

adb shell — подключение к устройству
# Переходим в каталог data
cd /data/data
# Наше приложение
cd com.bstu.test
# Заходим в каталог databases
cd databases
# Проверяем содержимое
ls
# Предполагаем, что есть файл БД test.db
# подключаемся к этой БД
sqlite3 test.db
11:02

79 из 80
Полезные ссылки
●

http://www.vogella.com

●

http://www.sqlite.org

●

http://d.android.com

11:02

80 из 80

More Related Content

Лекция Android. БД SQLite, ContentProvider, Loader

  • 1. SQLite и Android SQLite в Android ContentProvider
  • 2. Что такое SQLite? ● База данных с открытым исходным кодом. 11:02 2 из 80
  • 3. Что такое SQLite? ● База данных с открытым исходным кодом. ● Поддерживает SQL, транзакции и процедуры. 11:02 3 из 80
  • 4. Что такое SQLite? ● База данных с открытым исходным кодом. ● Поддерживает SQL, транзакции и процедуры. ● Не требует много ресурсов (примерно 250 кБ памяти). 11:02 4 из 80
  • 5. Что такое SQLite? ● База данных с открытым исходным кодом. ● Поддерживает SQL, транзакции и процедуры. ● Не требует много ресурсов (примерно 250 кБ памяти). ● Является встраиваемой библитекой. 11:02 5 из 80
  • 6. Что такое SQLite? ● База данных с открытым исходным кодом. ● Поддерживает SQL, транзакции и процедуры. ● Не требует много ресурсов (примерно 250 кБ памяти). ● Является встраиваемой библитекой. ● 3 основных типа данных: TEXT, INTEGER, REAL. 11:02 6 из 80
  • 7. Что такое SQLite? ● База данных с открытым исходным кодом. ● Поддерживает SQL, транзакции и процедуры. ● Не требует много ресурсов (примерно 250 кБ памяти). ● Является встраиваемой библитекой. ● 3 основных типа данных: TEXT, INTEGER, REAL. ● Всё содержимое БД храниться в одном файле. 11:02 7 из 80
  • 8. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. 11:02 8 из 80
  • 9. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. ● Не требуется установка или настройка БД. 11:02 9 из 80
  • 10. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. ● Не требуется установка или настройка БД. ● Необходимо определить только процедуры создания и обновления БД. 11:02 10 из 80
  • 11. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. ● Не требуется установка или настройка БД. ● ● Необходимо определить только процедуры создания и обновления БД. Выполняется обращение к файлам устройства. 11:02 11 из 80
  • 12. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. ● Не требуется установка или настройка БД. ● ● ● Необходимо определить только процедуры создания и обновления БД. Выполняется обращение к файлам устройства. Желательно выполнять запросы асинхронно (в отдельном потоке). 11:02 12 из 80
  • 13. Особенности SQLite в Android ● SQLite интегрирован во все Android устройства. ● Не требуется установка или настройка БД. ● ● ● ● Необходимо определить только процедуры создания и обновления БД. Выполняется обращение к файлам устройства. Желательно выполнять запросы асинхронно (в отдельном потоке). Файл БД храниться в каталоге приложения: DATA/data/ИМЯ_ПРИЛОЖЕНИЯ/databases/ИМЯ_ФАЙЛА DATA/data/com.bstu.test/databases/test.db 11:02 13 из 80
  • 14. Создание и обновление БД ● Создать класс-наследник класса SQLiteOpenHelper. 11:02 14 из 80
  • 15. Создание и обновление БД ● Создать класс-наследник класса SQLiteOpenHelper. ● Вызвать конструктор родителя с параметрами: имя_бд и версия_бд. 11:02 15 из 80
  • 16. Создание и обновление БД ● Создать класс-наследник класса SQLiteOpenHelper. ● Вызвать конструктор родителя с параметрами: имя_бд и версия_бд. ● Переопределить методы onCreate() и onUpgrade(). 11:02 16 из 80
  • 17. Создание и обновление БД ● Создать класс-наследник класса SQLiteOpenHelper. ● Вызвать конструктор родителя с параметрами: имя_бд и версия_бд. ● Переопределить методы onCreate() и onUpgrade(). ● Параметром методов является класс SQLiteDatabase. 11:02 17 из 80
  • 18. Создание и обновление БД ● Создать класс-наследник класса SQLiteOpenHelper. ● Вызвать конструктор родителя с параметрами: имя_бд и версия_бд. ● Переопределить методы onCreate() и onUpgrade(). ● Параметром методов является класс SQLiteDatabase. ● getReadableDatabase() и getWritableDatabase() предоставляют доступ к БД. 11:02 18 из 80
  • 19. Класс SQLiteDatabase ● Базовый класс для работы с БД SQLite. 11:02 19 из 80
  • 20. Класс SQLiteDatabase ● ● Базовый класс для работы с БД SQLite. Предоставляет методы для выполнения запросов к БД, открытия/обновления/закрытия БД. 11:02 20 из 80
  • 21. Класс SQLiteDatabase ● ● ● Базовый класс для работы с БД SQLite. Предоставляет методы для выполнения запросов к БД, открытия/обновления/закрытия БД. insert(), update(), delete(). 11:02 21 из 80
  • 22. Класс SQLiteDatabase ● ● Базовый класс для работы с БД SQLite. Предоставляет методы для выполнения запросов к БД, открытия/обновления/закрытия БД. ● insert(), update(), delete(). ● execSQL(). 11:02 22 из 80
  • 23. Класс SQLiteDatabase ● ● Базовый класс для работы с БД SQLite. Предоставляет методы для выполнения запросов к БД, открытия/обновления/закрытия БД. ● insert(), update(), delete(). ● execSQL(). ● Запросы к БД выполняются через – rawQuery() – query() – SQLiteQueryBuilder класс 11:02 23 из 80
  • 24. Примеры запросов к БД ● rawQuery(): getReadableDatabase().rawQuery("select * from todo where _id = ?", new String[] { id }); ● query(): database.query(DATABSE_TABLE, new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY }, null, null, null, null, null); 11:02 24 из 80
  • 25. Параметры метода query() Параметр String dbName String[] columnNames String whereClause String[] selectionArgs String[] groupBy String[] having String[] orderBy 11:02 Описание Название таблицы, для которой выполняется запрос. Список столбцов, которые нужно вернуть. null — все столбцы. Раздел where sql-запроса, фильтрует результат. null — все данные. Знаки «?» в разделе where заменяются значениями из массива selectionArgs. Определяет группировку столбцов. Фильтр групп Столбцы, по которым данные сортируются 25 из 80
  • 26. Класс ContentValues ● Определяет пары ключ/значение. 11:02 26 из 80
  • 27. Класс ContentValues ● Определяет пары ключ/значение. ● Ключ — имя столбца таблицы. 11:02 27 из 80
  • 28. Класс ContentValues ● Определяет пары ключ/значение. ● Ключ — имя столбца таблицы. ● Значение — содержимое записи в данном столбце. 11:02 28 из 80
  • 29. Класс ContentValues ● Определяет пары ключ/значение. ● Ключ — имя столбца таблицы. ● Значение — содержимое записи в данном столбце. ● Используется для добавления/обновления данных в БД. 11:02 29 из 80
  • 30. Класс Cursor ● Запрос возвращает объект типа Cursor. 11:02 30 из 80
  • 31. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. 11:02 31 из 80
  • 32. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. ● getCount(). 11:02 32 из 80
  • 33. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. ● getCount(). ● moveToFirst(), moveToNext(), isAfterLast(). 11:02 33 из 80
  • 34. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. ● getCount(). ● moveToFirst(), moveToNext(), isAfterLast(). ● Типизированные методы get*() для извлечения данных (getLong(columnIndex), getString(columnIndex)). 11:02 34 из 80
  • 35. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. ● getCount(). ● moveToFirst(), moveToNext(), isAfterLast(). ● ● Типизированные методы get*() для извлечения данных (getLong(columnIndex), getString(columnIndex)). getColumnIndex(columnName) 11:02 35 из 80
  • 36. Класс Cursor ● Запрос возвращает объект типа Cursor. ● Cursor указывает на одну строку результата. ● getCount(). ● moveToFirst(), moveToNext(), isAfterLast(). ● Типизированные методы get*() для извлечения данных (getLong(columnIndex), getString(columnIndex)). ● getColumnIndex(columnName) ● close() 11:02 36 из 80
  • 38. Что такое ContentProvider? ● Позволяет приложениям получать доступ к структурированным данным. 11:02 38 из 80
  • 39. Что такое ContentProvider? ● ● Позволяет приложениям получать доступ к структурированным данным. Помогает приложениям «делиться» своими данными с другими приложениями (напр., получить доступ к списку контактов). 11:02 39 из 80
  • 40. Что такое ContentProvider? ● ● ● Позволяет приложениям получать доступ к структурированным данным. Помогает приложениям «делиться» своими данными с другими приложениями (напр., получить доступ к списку контактов). Должен быть объявлен в файле AndroidManifest.xml 11:02 40 из 80
  • 41. Что такое ContentProvider? ● ● ● ● Позволяет приложениям получать доступ к структурированным данным. Помогает приложениям «делиться» своими данными с другими приложениями (напр., получить доступ к списку контактов). Должен быть объявлен в файле AndroidManifest.xml Собственный ContentProvider нужен только для предоставления «своих» данных другим приложениям 11:02 41 из 80
  • 42. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. 11:02 42 из 80
  • 43. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. ● URI передается объекту ContentResolver. 11:02 43 из 80
  • 44. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. ● URI передается объекту ContentResolver. ● URI состоит из имени ContentProvider (authority) и имени таблицы (path). 11:02 44 из 80
  • 45. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. ● URI передается объекту ContentResolver. ● URI состоит из имени ContentProvider (authority) и имени таблицы (path). content://com.bstu.test/test 11:02 45 из 80
  • 46. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. ● URI передается объекту ContentResolver. ● URI состоит из имени ContentProvider (authority) и имени таблицы (path). content://com.bstu.test/test ● content:// - схема данных. 11:02 46 из 80
  • 47. Доступ к ContentProvider ● Доступ к ContentProvider осуществляется по URI. ● URI передается объекту ContentResolver. ● URI состоит из имени ContentProvider (authority) и имени таблицы (path). content://com.bstu.test/test ● content:// - схема данных. // Запрашивает пользовательский словарь и возвращает данные mCursor = getContentResolver().query( UserDictionary.Words.CONTENT_URI,// URI данных в таблице слов mProjection, // Столбцы, которые нужно вернуть mSelectionClause // Критерий отбора (where) mSelectionArgs, // Аргументы отбора mSortOrder); // Порядок сортировки строк 11:02 47 из 80
  • 49. Реализация собственного ContentProvider ● Реализовать класс-наследник от ContentProvider. ● Объявить в AndroidManifest.xml. <provider android:authorities="com.bstu.test" android:name=".MyTestContentProvider" android:exported="true" > </provider> 11:02 49 из 80
  • 50. Реализация собственного ContentProvider ● Реализовать класс-наследник от ContentProvider. ● Объявить в AndroidManifest.xml. ● Реализовать методы – query() - возвращает Cursor – insert() – update() – delete() – getType() – onCreate() 11:02 50 из 80
  • 51. Реализация собственного ContentProvider ● Реализовать класс-наследник от ContentProvider. ● Объявить в AndroidManifest.xml. ● Реализовать методы – query() - возвращает Cursor – insert() – update() – delete() – getType() – onCreate() 11:02 UnsupportedOperationException() 51 из 80
  • 54. Безопасность ContentProvider ● android:exported="true|false" ● Необходимо следить за потоко-безопасностью. ● Ключевое слово synchronized. 11:02 54 из 80
  • 55. Безопасность ContentProvider ● android:exported="true|false" ● Необходимо следить за потоко-безопасностью. ● Ключевое слово synchronized. ● android:multiprocess="true". 11:02 55 из 80
  • 56. Безопасность ContentProvider ● android:exported="true|false" ● Необходимо следить за потоко-безопасностью. ● Ключевое слово synchronized. ● android:multiprocess="true". – 11:02 создает объект ContentProvider в каждом запросившем процессе; 56 из 80
  • 57. Безопасность ContentProvider ● android:exported="true|false" ● Необходимо следить за потоко-безопасностью. ● Ключевое слово synchronized. ● android:multiprocess="true". – создает объект ContentProvider в каждом запросившем процессе; – нет необходимости в межпроцессорном обмене (IPC). 11:02 57 из 80
  • 58. Класс Loader ● Позволяет асинхронно загружать данные в activity. 11:02 58 из 80
  • 59. Класс Loader ● Позволяет асинхронно загружать данные в activity. ● Обновляет данные при из изменении. 11:02 59 из 80
  • 60. Класс Loader ● Позволяет асинхронно загружать данные в activity. ● Обновляет данные при из изменении. ● Сохраняет данные при изменении конфигурации. 11:02 60 из 80
  • 61. Класс Loader ● Позволяет асинхронно загружать данные в activity. ● Обновляет данные при из изменении. ● Сохраняет данные при изменении конфигурации. ● Может кэшировать данные. 11:02 61 из 80
  • 62. Класс Loader ● Позволяет асинхронно загружать данные в activity. ● Обновляет данные при из изменении. ● Сохраняет данные при изменении конфигурации. ● Может кэшировать данные. ● Впервые появились в Android 3.0. 11:02 62 из 80
  • 63. Класс Loader ● Позволяет асинхронно загружать данные в activity. ● Обновляет данные при из изменении. ● Сохраняет данные при изменении конфигурации. ● Может кэшировать данные. ● Впервые появились в Android 3.0. ● Совместим вниз до Android 1.6 (Android support library) 11:02 63 из 80
  • 65. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. 11:02 65 из 80
  • 66. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); 11:02 66 из 80
  • 67. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); – 11:02 уникальный ID; 67 из 80
  • 68. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); – уникальный ID; – Bundle, для передачи каких-либо данных; 11:02 68 из 80
  • 69. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); – уникальный ID; – Bundle, для передачи каких-либо данных; – класс реализующий интерфейс LoaderManager.LoaderCallbacks (обычно activity). 11:02 69 из 80
  • 70. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); ● Создание происходит в callback-методе onCreateLoader(). 11:02 70 из 80
  • 71. Реализация Loader ● Реализовать класс-наследник от AsyncTaskLoader. ● LoaderManager управляет объектами типа Loader. ● Получения Loader: getLoaderManager().initLoader(0, null, this); ● ● Создание происходит в callback-методе onCreateLoader(). После завершения загрузки вызывается onLoadFinished(). 11:02 71 из 80
  • 72. SQLite и CursorLoader ● CursorLoader — реализации Loader для БД SQLite. 11:02 72 из 80
  • 73. SQLite и CursorLoader ● ● CursorLoader — реализации Loader для БД SQLite. Выполняет загрузку данных в фоне, не блокируя поток приложения. 11:02 73 из 80
  • 74. SQLite и CursorLoader ● ● ● CursorLoader — реализации Loader для БД SQLite. Выполняет загрузку данных в фоне, не блокируя поток приложения. Если Cursor требует обновления, вызывается метод onLoaderReset(). 11:02 74 из 80
  • 75. SQLite и CursorLoader ● ● ● ● CursorLoader — реализации Loader для БД SQLite. Выполняет загрузку данных в фоне, не блокируя поток приложения. Если Cursor требует обновления, вызывается метод onLoaderReset(). Переподключает Cursor при изменении конфигурации. 11:02 75 из 80
  • 76. Доступ к SQLite БД через shell ● БД SQLite храниться в одном файле. 11:02 76 из 80
  • 77. Доступ к SQLite БД через shell ● БД SQLite храниться в одном файле. ● Доступен в эмуляторе и устройствах с правами root. 11:02 77 из 80
  • 78. Доступ к SQLite БД через shell ● БД SQLite храниться в одном файле. ● Доступен в эмуляторе и устройствах с правами root. ● adb shell — подключение к устройству 11:02 78 из 80
  • 79. Доступ к SQLite БД через shell ● БД SQLite храниться в одном файле. ● Доступен в эмуляторе и устройствах с правами root. ● adb shell — подключение к устройству # Переходим в каталог data cd /data/data # Наше приложение cd com.bstu.test # Заходим в каталог databases cd databases # Проверяем содержимое ls # Предполагаем, что есть файл БД test.db # подключаемся к этой БД sqlite3 test.db 11:02 79 из 80