Создание AsyncQueryHandler
18.08.2016
Создание AsyncQueryHandler и его дальнейшее функционирование (вызов операций провайдера) могут происходить в любом потоке, но чаще всего он используется в UI-потоке. Тем не менее обратные вызовы всегда выполняются в потоке, который создал AsyncQueryHandler.
AsyncQueryHandler нельзя использовать для прямого асинхронного взаимодействия с базой данных SQLite. Вместо этого сервер hp proliant данных должен быть обёрнут в ContentProvider, доступ к которому может осуществляться через ContentResolver.
Список контактов, хранящийся в устройстве, обслуживается с помощью системного провайдера, чтобы все приложения, работающие на этом устройстве, могли использовать один и тот же список. Провайдер контактов доступен через специализированный интерфейс ContactsContract. В следующем примере показано, как вывести содержимое телефонной книги с помощью AsyncQueryHandler. Изначально в списке отображаются только имена контактов, но если щелкнуть на любом имени (элементе списка), этот элемент раскроется, и появятся номера телефонов данного контакта. Код позаимствован из набора примеров приложений Android SDK1, но в него внесены некоторые небольшие изменения.
Определение типов запросов, обрабатываемых QueryHandler: один для запросов имени контакта и один для запроса номеров телефонов.
Начало выполнения асинхронного запроса имён контактов.
Отмена ожидающих операций провайдера, если объект Activity был удалён.
Получение результата с именем контакта, запрашиваемого в методе mQueryHandler. startQuery (). Адаптер инициализирует соответствующий последующий запрос в курсоре элементов-потомков, то есть запрос номеров телефонов.
Получение результата запроса номеров телефонов с объектом cookie, идентифицирующим контакт, которому принадлежат эти номера.
Начало выполнения асинхронного запроса номеров телефонов, принадлежащих заданным контактам.
|