SlideShare a Scribd company logo
1 of 80
Download to read offline
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

What's hot

Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8Technopark
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.Igor Shkulipa
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Fedor Lavrentyev
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 

What's hot (20)

Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
Industrial Programming Java - Lection Pack 01 - Building an application - Lav...
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 

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

05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
KTURE_1 место в NoSQL Expert
KTURE_1 место в NoSQL ExpertKTURE_1 место в NoSQL Expert
KTURE_1 место в NoSQL ExpertGolden Byte
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
13 расширенные возможности корпоративных приложений, основы субд
13 расширенные возможности корпоративных приложений, основы субд13 расширенные возможности корпоративных приложений, основы субд
13 расширенные возможности корпоративных приложений, основы субдKewpaN
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в DelphiAeka227
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...Dmitry Andreev
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
#14 Основы работы с базами данных SQLite.pdf
#14   Основы работы с базами данных SQLite.pdf#14   Основы работы с базами данных SQLite.pdf
#14 Основы работы с базами данных SQLite.pdfSergeyAn2
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 

Similar to Лекция Android. БД SQLite, ContentProvider, Loader (20)

05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
KTURE_1 место в NoSQL Expert
KTURE_1 место в NoSQL ExpertKTURE_1 место в NoSQL Expert
KTURE_1 место в NoSQL Expert
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
JDBC
JDBCJDBC
JDBC
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Tdd php
Tdd phpTdd php
Tdd php
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
13 расширенные возможности корпоративных приложений, основы субд
13 расширенные возможности корпоративных приложений, основы субд13 расширенные возможности корпоративных приложений, основы субд
13 расширенные возможности корпоративных приложений, основы субд
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
базы данных в Delphi
базы данных в Delphiбазы данных в Delphi
базы данных в Delphi
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Управление данными (sql)
 
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...
Разработка, тестирование и развертывание баз данных в Visual Studio Team Syst...
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
#14 Основы работы с базами данных SQLite.pdf
#14   Основы работы с базами данных SQLite.pdf#14   Основы работы с базами данных SQLite.pdf
#14 Основы работы с базами данных SQLite.pdf
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 

Лекция 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