Что мы используем?

Кредит изображения: Автор

Я работал над проектом, в котором мне нужно было внедрить Google Place Autocomplete API. Мой старший попросил меня реализовать этот API с помощью Retrofit.

Я использовал MVVM в качестве своей архитектуры. Я много пробовал, но застрял во многих ситуациях. Затем я успешно реализовал Place Autocomplete с MVVM и Retrofit.

Вызов Google Places API с использованием Retrofit/MVVM/Dagger/привязки данных/Kotlin Coroutines

Я думал, что многие разработчики могут столкнуться с той же ситуацией, что и я. Проблема заключалась в том, что в Интернете нет доступной статьи, посвященной Place Autocomplete API с MVVM и Retrofit.

Если вы здесь и застряли при реализации Place Autocomplete API с Retrofit и MVVM, вы попали по адресу.

Это будет очень длинное руководство, потому что существует так много знаний, связанных с разработкой для Android. Как видите, я использую Dagger/Retrofit/Data Binding Library и многое другое. Итак, начнем. Если вы где-то застряли, не стесняйтесь комментировать.

Давайте начнем.

Если вы новичок и не знаете о привязке данных, вам следует сначала прочитать об этом, прежде чем переходить к этой статье.

Шаг первый

  1. MVVM (архитектурный шаблон)
  2. Библиотека привязки данных
  3. Модернизация
  4. Кинжал
  5. «Котлин Корутины»
  6. master → завершить проект

Здесь мы будем использовать Google Maps. Итак, прежде чем мы начнем наш проект. Выполним первоначальную настройку для создания среды.

Я призвал вас ознакомиться с официальными документами Google и выполнить все шаги, чтобы создать ключ API.

Примечание. Обязательно включите платежную информацию, чтобы использовать Places API.

Клонируйте этот проект, чтобы убедиться, что у вас не осталось путаницы, чтобы начать этот проект.

Шаг второй

Этот репозиторий имеет две ветки:

После создания ключа API вставьте его в build.gradle под тегом buildTypes, а затем нажмите sync.

  1. starter → начинающий проект для вас
  2. Модули уведомляют Dagger о том, как предоставлять зависимости от графа зависимостей. Это означает, сколько зависимостей потребуется для создания экземпляра конкретного объекта. За это отвечает модуль.

Шаг третий

строить. град (уровень приложения)

После добавления ключа API запустите приложение. Вы увидите, что карта отображается, и все настроено правильно.

Давайте теперь настроим Dagger в нашем приложении. Если вы новичок в Dagger или не знаете о Dagger, вы можете проверить «официальную документацию» или просмотреть эти руководства на YouTube.

«Dagger 2 для начинающих Android — Dagger 2 часть I»

Но если вы хотите продолжить или у вас недостаточно времени для просмотра полной серии YouTube на Dagger, Hari Vignesh Jayapalan написал полную серию для начинающих пользователей Android на Dagger.

Под пакетомdi сделайте два пакета, module и component. В Dagger у нас есть модули и компоненты. Позволю себе небольшой обзор.

Эта история является четвертой частью серии Dagger 2 для начинающих Android. Если вы не читали предыдущую, вы…

medium.com

Шаг четвертый

Давайте сначала применим Dagger к Retrofit. Это широко используемая сетевая библиотека, которую также рекомендует Google. В пакете retrofit создайте два класса объектов и один такой интерфейс.

  1. Компоненты играют основную роль в предоставлении экземпляра, потому что они сообщают Dagger, как комбинировать зависимости и удерживать все вместе.
  2. GeneralRepository → Здесь мы используем MVVM, а MVVM требуется репозиторий для выполнения задач по выборке данных с сервера или базы данных.

Шаг пятый

→ В ApiFields я обычно объявляю переменные пути или заголовки.
→ В ApiHostUrls я объявляю методы интерфейса для модернизации.
→ В ApiRoutes я объявляю конечные точки для удаленного URL.

Давайте создадим экземпляр Retrofit с помощью Dagger. В пакете di мы создали пакет под названием modules. Помните?

Шаг шестой

Создайте класс с именем NetworkModule и вставьте следующий код.

Мы уже узнали о модулях и роли модуля в Dagger. Как видите, чтобы создать экземпляр Retrofit, мы предоставляем зависимости, используя аннотацию provides.

Перестройте свой проект, чтобы Dagger выполнял свою работу по созданию классов.

Модуль готов. Пришло время создать компонент, чтобы мы могли все объединить и получить экземпляр Retrofit.

ContextComponent — это зависимость для обеспечения контекста приложения во всем приложении.

Перестройте свой проект снова!

Dagger нуждается в регистрации на уровне приложения, чтобы творить чудеса. Нам нужно сделать класс, унаследованный от Application.

Теперь откройте AndroidManifest.xml и вызовите MyApp в атрибуте name тега application.

Перестройте свой проект.

У нас все готово с Retrofit. Давайте реализуем модуль Repository для нашей структуры MVVM, используя Dagger.

Сделать RepositoryModue.kt под di пакетом в module пакете.

Все зависимости Dagger будут использоваться от класса InjectUtils.

  1. GeneralRemoteDataSource → Это мой образ действий. Это класс, который предоставляет обратные вызовы для связи с GeneralRepository.
  2. GeneralDataSource → Это интерфейс, включающий все обратные вызовы.
  3. «http://narrabri.net/fub/Sch-v-Fre-dfb-01.html»
    «http://narrabri.net/fub/Sch-v-Fre-dfb-02.html»
    «http://narrabri.net/fub/Sch-v-Fre-dfb-03.html»
    «http://narrabri.net/fub/Sch-v-Fre-dfb- 04.html»
    «http://narrabri.net/fub/Sch-v-Fre-dfb-05.html»
    «http://narrabri.net/fub/Juv-v- Ata-notizie-01.html»
    «http://narrabri.net/fub/Juv-v-Ata-notizie-02.html»
    «http://narrabri.net/fub/ Juv-v-Ata-notizie-03.html»
    «http://narrabri.net/fub/Juv-v-Ata-notizie-04.html»
    «http://narrabri. net/fub/Juv-v-Ata-notizie-05.html»
    «http://narrabri.net/fub/v-ideo-Nantes-foot-fr-01.html»
    « http://narrabri.net/fub/v-ideo-Nantes-foot-fr-02.html»
    «http://narrabri.net/fub/v-ideo-Nantes-foot-fr-03 .html»
    «http://narrabri.net/fub/Nm-v-Nc-direct-tv-01.html»
    «http://narrabri.net/fub/Nm-v -Nc-direct-tv-02.html»
    «http://narrabri.net/fub/Nm-v-Nc-direct-tv-03.html»
    «http://narrabri .net/fub/Mon-v-Met-sncf-01.html»
    «http://narrabri.net/fub/ Mon-v-Met-sncf-02.html»
    «http://narrabri.net/fub/Mon-v-Met-sncf-03.html»
    «http://narrabri. net/fub/Dijon-v-Lille-chaine-tv1.html»
    «http://narrabri.net/fub/Dijon-v-Lille-chaine-tv2.html»
    «http: //narrabri.net/fub/Дижон-в-Лилль-чейн-tv3.html»
    «http://narrabri.net/fub/Ang-v-Stb-foot-fr-01.html»< br /> «http://narrabri.net/fub/Ang-v-Stb-foot-fr-02.html»
    «http://narrabri.net/fub/Ang-v-Stb-foot -fr-03.html»
    «https://aicbelize.azurewebsites.net/fcb/Sch-v-Fre-dfb-01.html»
    «https://aicbelize.azurewebsites.net /fcb/Sch-v-Fre-dfb-02.html»
    «https://aicbelize.azurewebsites.net/fcb/Sch-v-Fre-dfb-03.html»
    «https ://aicbelize.azurewebsites.net/fcb/Sch-v-Fre-dfb-04.html»
    «https://aicbelize.azurewebsites.net/fcb/Sch-v-Fre-dfb-05. html»
    «https://aicbelize.azurewebsites.net/fcb/Juv-v-Ata-notizie-01.html»
    «https://aicbelize.azurewebsites.net/fcb/Juv- v-Ata-notizie-02.html»
    «https://aicbelize.azurewebsites.net/fcb/Juv-v-Ata-notizi e-03.html»
    «https://aicbelize.azurewebsites.net/fcb/Juv-v-Ata-notizie-04.html»
    «https://aicbelize.azurewebsites.net/ fcb/Juv-v-Ata-notizie-05.html»
    «https://aicbelize.azurewebsites.net/fcb/v-ideo-Nantes-foot-fr-01.html»
    « https://aicbelize.azurewebsites.net/fcb/v-ideo-Nantes-foot-fr-02.html»
    «https://aicbelize.azurewebsites.net/fcb/v-ideo-Nantes-foot -fr-03.html»
    «https://aicbelize.azurewebsites.net/fcb/Nm-v-Nc-direct-tv-01.html»
    «https://aicbelize.azurewebsites .net/fcb/Nm-v-Nc-direct-tv-02.html»
    «https://aicbelize.azurewebsites.net/fcb/Nm-v-Nc-direct-tv-03.html»
    «https://aicbelize.azurewebsites.net/fcb/Mon-v-Met-sncf-01.html»
    «https://aicbelize.azurewebsites.net/fcb/Mon-v- Met-sncf-02.html»
    «https://aicbelize.azurewebsites.net/fcb/Mon-v-Met-sncf-03.html»
    «https://aicbelize.azurewebsites. net/fcb/Дижон-в-Лилль-чейн-tv1.html»
    «https://aicbelize.azurewebsites.net/fcb/Дижон-в-Лилль-чейн-tv2.html»
    « https://а icbelize.azurewebsites.net/fcb/Dijon-v-Lille-chaine-tv3.html»
    «https://aicbelize.azurewebsites.net/fcb/Ang-v-Stb-foot-fr-01.html »
    «https://aicbelize.azurewebsites.net/fcb/Ang-v-Stb-foot-fr-02.html»
    «https://aicbelize.azurewebsites.net/fcb/Ang -v-Stb-foot-fr-03.html»
    «https://aicbelize.azurewebsites.net/serv0/Video-Schalke-v-Freiburg-hq01.html»
    «https:/ /aicbelize.azurewebsites.net/serv0/Video-Schalke-v-Freiburg-hq02.html»
    «https://aicbelize.azurewebsites.net/serv0/Video-Schalke-v-Freiburg-hq03.html»
    «https://aicbelize.azurewebsites.net/serv0/Epl-Arsenal-v-Southampton-v-en01.html»
    «https://aicbelize.azurewebsites.net/serv0/Epl- Арсенал-v-Саутгемптон-v-en02.html»
    «https://aicbelize.azurewebsites.net/serv0/Epl-Arsenal-v-Саутгемптон-v-en03.html»
    «https: //aicbelize.azurewebsites.net/serv0/videos-Leeds-v-Newcastle-lez-01.html»
    «https://aicbelize.azurewebsites.net/serv0/videos-Leeds-v-Newcastle-lez -02.html»
    «https://aicbeliz e.azurewebsites.net/serv0/videos-Leeds-v-Newcastle-lez-03.html»
    «https://aicbelize.azurewebsites.net/serv0/Video-Leicester-v-Everton-en-gb01 .html»
    «https://aicbelize.azurewebsites.net/serv0/Video-Leicester-v-Everton-en-gb02.html»
    «https://aicbelize.azurewebsites.net/serv0 /Video-Leicester-v-Everton-en-gb03.html»
    «https://aicbelize.azurewebsites.net/serv0/video-Juve-v-Ath-diretta01.html»
    «https ://aicbelize.azurewebsites.net/serv0/video-Juve-v-Ath-diretta02.html»
    «https://aicbelize.azurewebsites.net/serv0/video-Juve-v-Ath-diretta03. html»
    «https://aicbelize.azurewebsites.net/serv0/video-Juve-v-Ath-diretta04.html»
    «https://aicbelize.azurewebsites.net/serv0/video- Juve-v-Ath-diretta05.html»
    «https://aicbelize.azurewebsites.net/serv0/video-County-v-Swansea-City-01.html»
    «https:// aicbelize.azurewebsites.net/serv0/video-County-v-Swansea-City-02.html»
    «https://aicbelize.azurewebsites.net/serv0/video-County-v-Swa

Пришло время развлечься. Здесь я следую официальной документации Google, касающейся автозаполнения места и сведений о месте.

«Автозаполнение места | API мест | Разработчики Google»

Удаленный URL-адрес Google, откуда мы получаем данные:

Примечание: серверные и клиентские библиотеки Служба автозаполнения мест — это веб-служба, которая возвращает место…

developers.google.com

Шаг седьмой

Я создал классы POJO для PlaceAutoCompleteResponse и PlaceDetailsResponse.

https://maps.googleapis.com/

Вам интересно, откуда я знаю обо всех этих ответах. Я познакомился с ними из официальной документации, о которой я упоминал выше.

Я уже создал пользовательский интерфейс для этого приложения (надеюсь, вы клонировали мой стартовый проект).

Котлин

Во-первых, мы будем вызывать Autocomplete API, когда пользователь начинает печатать после получения, и этот ответ будет отображаться в виде списка в RecyclerView, например:

ПоискМестАктивность

Когда пользователь нажимает на любой элемент этого списка, мы вызываем Place Detail API, чтобы получить название места, широту и долготу, используя placeId.

Мы вызываем Place Detail API, потому что в ответе Place Autocomplete API нет информации об имени, широте и долготе. Он просто дает нам список прогнозов и идентификатор места.

Здесь мы следуем MVVM, поэтому нам нужна модель представления, чтобы передать ответ пользовательскому интерфейсу. Вот класс модели представления, содержащий вызов Place Autocomplete и Place Details API с использованием Kotlin Coroutines.

Это SearchPlacesActivity.kt

Это MainActivity.kt.

Все просто и понятно.

Запустите ваше приложение, и вы увидите следующий результат.

Надеюсь, вам понравится этот урок. Если вы где-то застряли, не стесняйтесь комментировать. Удачного кодирования

API автозаполнения Google Place с модификацией, кинжалом и сопрограммами