Общие принципы | Mobile SDK | 2GIS Documentation
Android SDK

Общие принципы

Некоторые методы SDK (например те, которые обращаются к удалённому серверу) возвращают отложенные результаты (Future). Для работы с ними нужно создать обработчик получения данных и обработчик ошибок.

Пример получения объекта из справочника:

// Создание объекта для поиска по справочнику
val searchManager = SearchManager.createOnlineManager(sdkContext)

// Получение объекта из справочника по идентификатору
val future = searchManager.searchByDirectoryObjectId(objectId)

// Обработка результата
future.onResult { directoryObject ->
    Log.d("APP", "Название объекта: ${directoryObject.title}")
}

// Обработка ошибки
future.onError { error ->
    Log.d("APP", "Ошибка получения информации об объекте.")
}

По умолчанию обработка результатов происходит в UI-потоке. Чтобы это изменить, для onResult и onError можно указать Executor.

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

Некоторые объекты SDK предоставляют потоки значений, которые можно обработать, используя механизм каналов: на поток можно подписаться, указав функцию-обработчик данных, и отписаться, когда обработка данных больше не требуется. Для работы с потоками значений используется интерфейс Channel.

Пример подписки на изменение видимой области карты (поток новых прямоугольных областей):

// Выбираем канал (прямоугольники видимой области карты)
val visibleRectChannel = map.camera.visibleRectChannel

// Подписываемся и обрабатываем результаты в главной очереди. Значения будут присылаться при любом изменении видимой области до момента отписки.
// Важно сохранить соединение с каналом, иначе подписка будет уничтожена.
val connection = visibleRectChannel.connect { geoRect ->
    Log.d("APP", "${geoRect.southWestPoint.latitude.value}")
}

После окончания работы с каналом важно отменить подписку, чтобы избежать утечки памяти. Для этого нужно вызвать метод close():

connection.close()