ההשלמה האוטומטית (חדש) מחזירה חיזויים של מקומות בתגובה לבקשה שכוללת מחרוזת טקסט לחיפוש וגבולות גיאוגרפיים ששולטים באזור החיפוש. ההשלמה האוטומטית יכולה להתאים מילים מלאות ומחרוזות משנה של הקלט, ולפתור שמות של מקומות, כתובות וקודי פלוס. האפליקציה יכולה לשלוח שאילתות בזמן שהמשתמש מקליד, כדי לספק תחזיות של מקומות ושאילתות בזמן אמת.
לדוגמה, אתם קוראים ל-Autocomplete באמצעות מחרוזת קלט שמכילה קלט חלקי של משתמש, Sicilian piz, כאשר אזור החיפוש מוגבל לסן פרנסיסקו, קליפורניה. התשובה מכילה רשימה של תחזיות לגבי מקומות שתואמות למחרוזת החיפוש ולאזור החיפוש, כמו המסעדה Sicilian Pizza Kitchen. התחזיות לגבי מקומות שמוחזרות נועדו להצגה למשתמש כדי לעזור לו לבחור את המקום הרצוי. אפשר לשלוח בקשה של פרטי מקום (חדש) כדי לקבל מידע נוסף על כל אחת מהתחזיות לגבי מקומות שמוחזרות.
יש שתי דרכים עיקריות לשלב את הפונקציונליות של ההשלמה האוטומטית (חדשה) באפליקציה:
- הוספת הווידג'ט Place Autocomplete:
הווידג'ט מספק חוויית השלמה אוטומטית של חיפושים שמוכנה לשימוש באמצעות המחלקה
PlaceAutocomplete
, שמציגה תחזיות בזמן שהמשתמש מקליד. - קבלת תחזיות לגבי מקומות באופן פרוגרמטי: קוראים ל-API ישירות כדי לאחזר תחזיות ולהציג אותן בממשק משתמש מותאם אישית.
הוספת הווידג'ט של השלמה אוטומטית למקומות
כדי לספק בקלות רבה יותר חוויית השלמה אוטומטית עקבית של מקומות, אתם יכולים להוסיף את הווידג'ט Place Autocomplete לאפליקציה. הווידג'ט מספק ממשק ייעודי במסך מלא שמטפל בקלט של המשתמש ומציג למשתמש תחזיות של מקומות, תוך החזרת אובייקטים מסוג AutocompletePrediction
לאפליקציה. לאחר מכן תוכלו לשלוח בקשה מסוג Place Details (New) כדי לקבל מידע נוסף על כל אחת מהתחזיות של המקומות.
בדומה לקבלת חיזויים של מקומות באופן פרוגרמטי, הווידג'ט Place Autocomplete מאפשר להשתמש באסימוני סשן כדי לקבץ בקשות להשלמה אוטומטית לסשן לצורכי חיוב. אפשר להעביר טוקן של סשן כשיוצרים את הכוונה לווידג'ט על ידי קריאה ל-setAutocompleteSessionToken()
. אם לא תספקו טוקן של סשן, הווידג'ט ייצור טוקן בשבילכם, ותוכלו לגשת אליו באמצעות קריאה ל-getSessionTokenFromIntent()
. מידע נוסף על השימוש באסימוני סשן זמין במאמר מידע על אסימוני סשן.
כדי להוסיף את הווידג'ט של השלמה אוטומטית של מקומות לאפליקציה:
(אופציונלי) מגדירים טוקן סשן. אם לא תספקו טוקן של סשן, הווידג'ט ייצור טוקן בשבילכם.
מגדירים
autocompleteIntent
עם הפרמטרים הרצויים ועם טוקן הסשן.מגדירים
ActivityResultLauncher
עבורStartActivityForResult
. ה-launcher הזה יטפל בתוצאה שמוחזרת מפעילות ההשלמה האוטומטית.מטפלים בתוצאה בקריאה החוזרת (callback) של
ActivityResultLauncher
. התהליך כולל חילוץ שלAutocompletePrediction
ושלAutocompleteSessionToken
(אם לא סיפקתם משלכם), טיפול בשגיאות, ואפשרות לשלוח בקשתfetchPlace()
כדי לקבל פרטים נוספים על מקום.מפעילים את הכוונה באמצעות
placeAutocompleteActivityResultLauncher
בדוגמאות הבאות מוסבר איך להוסיף את הווידג'ט של השלמה אוטומטית של מקומות באמצעות Kotlin ו-Java:
Kotlin
// Provide the API key that has enabled "Places API (New)" in the Google Cloud Console. Places.initializeWithNewPlacesApiEnabled(/* Context= */ context, /* API Key= */ key) // Optional, create a session token for Autocomplete request and the followup FetchPlace request. val sessionToken: AutocompleteSessionToken = AutocompleteSessionToken.newInstance() val autocompleteIntent: Intent = PlaceAutocomplete.createIntent(this) { // ... provide input params for origin, countries, types filter ... setAutocompleteSessionToken(sessionToken) } val placeAutocompleteActivityResultLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> val intent = result.data if (intent != null && result.resultCode == PlaceAutocompleteActivity.RESULT_OK) { // get prediction object val prediction: AutocompletePrediction? = PlaceAutocomplete.getPredictionFromIntent(intent!!) // get session token val sessionToken: AutocompleteSessionToken? = PlaceAutocomplete.getSessionTokenFromIntent(intent!!) // create PlacesClient to make FetchPlace request (optional) val placesClient: PlacesClient = Places.createClient(this) val response = placesClient.awaitFetchPlace(prediction.placeId, Field.DISPLAY_NAME) { sessionToken = sessionToken // optional } } } // Launch Activity placeAutocompleteActivityResultLauncher.launch(autocompleteIntent)
Java
// Provide the API key that has enabled "Places API (New)" in the Google Cloud Console. Places.initializeWithNewPlacesApiEnabled(/* Context= */ context, /* API Key= */ key); // Optional, create a session token for Autocomplete request and the followup FetchPlace request AutocompleteSessionToken sessionToken = AutocompleteSessionToken.newInstance(); Intent autocompleteIntent = new PlaceAutocomplete.IntentBuilder() // ... set input params for origin, countries, types filter ... .setSessionToken(sessionToken) // optional .build(this); ActivityResultLauncher<Intent> placeAutocompleteActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { Intent intent = result.getData(); if (result.getResultCode() == PlaceAutocompleteActivity.RESULT_OK) { // get prediction object AutocompletePrediction prediction = PlaceAutocomplete.getPredictionFromIntent( Preconditions.checkNotNull(intent)); // get session token AutocompleteSessionToken sessionToken = PlaceAutocomplete.getSessionTokenFromIntent( Preconditions.checkNotNull(intent)); // create PlacesClient to make FetchPlace request (optional) PlacesClient placesClient = Places.createClient(this); FetchPlaceRequest request = FetchPlaceRequest.builder(prediction.getPlaceId(), Arrays.asList(Field.DISPLAY_NAME)) .setSessionToken(sessionToken).build(); Task<FetchPlaceResponse> task = placesClient.fetchPlace(request); } } } ); // Launch Activity placeAutocompleteActivityResultLauncher.launch(autocompleteIntent);
קבלת תחזיות לגבי מקומות באופן פרוגרמטי
האפליקציה יכולה לקבל רשימה של שמות או כתובות של מקומות חזויים מ-Autocomplete API על ידי קריאה ל-PlacesClient.findAutocompletePredictions()
והעברת אובייקט FindAutocompletePredictionsRequest
. בדוגמה הבאה מוצגת קריאה מלאה ל-PlacesClient.findAutocompletePredictions()
.
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Sicilian piz") .setRegionCode("ES") .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
תשובות להשלמה אוטומטית (חדש)
ה-API מחזיר את הערך
FindAutocompletePredictionsResponse
ב-Task
.
התג
FindAutocompletePredictionsResponse
מכיל רשימה של עד חמישה אובייקטים מסוג
AutocompletePrediction
שמייצגים מקומות שצפויים להיות קרובים. יכול להיות שהרשימה תהיה ריקה אם אין מקום מוכר שתואם לשאילתה ולמסנן.
לכל מקום שחזיתם, אפשר לקרוא לשיטות הבאות כדי לאחזר פרטים על המקום:
-
getFullText(CharacterStyle)
מחזירה את הטקסט המלא של תיאור המקום. זהו שילוב של הטקסט הראשי והטקסט המשני. דוגמה: "Eiffel Tower, Avenue Anatole France, Paris, France". בנוסף, השיטה הזו מאפשרת להדגיש את החלקים בתיאור שתואמים לחיפוש בסגנון שתבחרו, באמצעותCharacterStyle
. הפרמטרCharacterStyle
הוא אופציונלי. אם לא רוצים להדגיש שום דבר, מגדירים את הערך כ-null. -
getPrimaryText(CharacterStyle)
מחזירה את הטקסט העיקרי שמתאר מקום. בדרך כלל זה השם של המקום. דוגמאות: "Eiffel Tower" ו- "123 Pitt Street". -
getSecondaryText(CharacterStyle)
מחזירה את הטקסט המשני של תיאור מקום. לדוגמה, אפשר להשתמש בזה כשמציגים חיזויים של השלמה אוטומטית בשורה השנייה. דוגמאות: 'Avenue Anatole France, Paris, France' ו-'Sydney, New South Wales'. -
getPlaceId()
מחזירה את מזהה המקום של המקום החזוי. מזהה מקום הוא מזהה טקסטואלי שמזהה באופן ייחודי מקום מסוים. אפשר להשתמש בו כדי לאחזר את אובייקטPlace
שוב מאוחר יותר. מידע נוסף על ��זהי מקומות בהשלמה האוטומטית זמין במאמר פרטי מקו�� (��דש). מידע כללי על מזהי מקומות זמין במאמר סקירה כללית על מזהי מקומות. -
getTypes()
מחזירה את רשימת סוגי המקומות שמשויכים למקום הזה. -
getDistanceMeters()
מחזירה את המרחק בקו ישר במטרים בין המקום הזה לבין הנקודה שצוינה בבקשה.
פרמטרים נדרשים
-
שאילתה
מחרוזת הטקסט שבה יתבצע החיפוש. מציינים מילים מלאות ותת-מחרוזות, שמות של מקומות, כתובות וקודי פלוס. שירות ההשלמה האוטומטית (חדש) מחזיר התאמות אפשריות על סמך המחרוזת הזו ומסדר את התוצאות לפי מידת הרלוונטיות שלהן.
כדי להגדיר את פרמטר השאילתה, צריך לבצע קריאה ל-method
setQuery()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
.
פרמטרים אופציונליים
-
סוגים של חשבונות משתמשים
רשימה של עד חמישה ערכים מסוג type מתוך הסוגים Table A או Table B, שמשמשים לסינון המקומות שמוחזרים בתשובה. כדי שמקום ייכלל בתשובה, הוא צריך להתאים לאחד מהערכים שצוינו לסוג הראשי.
למקום יכול להיות רק סוג ראשי אחד מתוך הסוגים Table A או Table B שמשויכים אליו. לדוגמה, הסוג הראשי יכול להיות
"mexican_restaurant"
או"steak_house"
.הבקשה נדחית עם השגיאה
INVALID_REQUEST
אם:- צוינו יותר מחמישה סוגים.
- מצוינים סוגים לא מזוהים.
כדי להגדיר את הפרמטר primary types, צריך לבצע קריאה ל-method
setTypesFilter()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
. -
מדינות
אפשר לכלול רק תוצאות מרשימת המדינות שצוינו, שמוגדרות כרשימה של עד 15 ערכים של ccTLD (דומיין ברמה העליונה) עם שני תווים. אם לא מציינים את הפרמטר הזה, לא מוחלות הגבלות על התשובה. לדוגמה, ��די להגביל את האזורים לגרמניה ולצרפת:
אם מציינים גם
locationRestriction
וגםincludedRegionCodes
, התוצאות יהיו באזור החיתוך של שתי ההגדרות.כדי להגדיר את פרמטר המדינות, צריך לבצע קריאה ל-method
setCountries()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
. -
היסט קלט
ההיסט של תו Unicode שמבוסס על אפס ומציין את מיקום הסמן בשאילתה. מיקום הסמן יכול להשפיע על התחזיות שמוחזרות. אם השדה ריק, ברירת המחדל היא אורך השאילתה.
כדי להגדיר את פרמטר ההיסט של הקלט, צריך לבצע קריאה ל-method
setInputOffset()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
. הטיה לפי מיקום או הגבלת מיקום
כדי להגדיר את אזור החיפוש, אפשר לציין הטיה למיקום או הגבלת מיקום, אבל לא את שניהם. הגבלת מיקום היא הגדרה של האזור שבו התוצאות צריכות להיות, והטיה לפי מיקום היא הגדרה של האזור שבו התוצאות צריכות להיות קרובות. ההבדל העיקרי הוא שבמקרה של הטיה לפי מיקום, יכול להיות שיוחזרו תוצאות מחוץ לאזור שצוין.
הטיה לפי מיקום
מציין אזור לחיפוש. המיקום הזה משמש כהטיה, לא כהגבלה, ולכן יכול להיות שיוחזרו תוצאות מחוץ לאזור שצוין.
כדי להגדיר את פרמטר הטיית המיקום, צריך לבצע קריאה ל-method
setLocationBias()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
.הגבלת מיקום
מציין אזור לחיפוש. לא יוחזרו תוצאות מחוץ לאזור שצוין.
כדי להגדיר את פרמטר הגבלת המיקום, צריך לבצע קריאה ל-method
setLocationRestriction()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
.
מציינים את הטיה לפי מיקום או את אזור ההגבלה לפי מיקום כמלבן של אזור התצוגה או כעיגול.
מעגל מוגדר על ידי נקודת מרכז ורדיוס במטרים. הרדיוס חייב להיות בין 0.0 ל-50,000.0, כולל. ערך ברירת המחדל הוא 0.0. בהגבלת מיקום, צריך להגדיר את הרדיוס לערך שגדול מ-0.0. אחרת, הבקשה לא מחזירה תוצאות.
מלבן הוא אזור תצוגה של קווי רוחב ואורך, שמיוצג על ידי שתי נקודות
low
ו-high
שממוקמות באלכסון זו מול זו. אזור התצוגה נחשב לאזור סגור, כלומר הוא כולל את הגבול שלו. הגבולות של קו הרוחב צריכים להיות בין 90- ל-90 מעלות, כולל, והגבולות של קו האורך צריכים להיות בין 180- ל-180 מעלות, כולל:- אם
low
=high
, אזור התצוגה מורכב מהנקודה היחידה הזו. - אם
low.longitude
>high.longitude
, טווח קווי האורך הפוך (אזור התצוגה חוצה את קו האורך 180). - אם
low.longitude
= -180 מעלות ו-high.longitude
= 180 מעלות, אזור התצוגה כולל את כל קווי האורך. - אם
low.longitude
= 180 מעלות ו-high.longitude
= -180 מעלות, טווח קווי האורך ריק.
חובה למלא את השדות
low
ו-high
, והתיבה שמייצגת את המידע לא יכולה להיות ריקה. אם אזור התצוגה ריק, תופיע שגיאה.- אם
-
מקור
נקודת המוצא שממנה יחושב המרחק בקו ישר ליעד (הגישה מתבצעת באמצעות
getDistanceMeters()
). אם הערך הזה לא מצוין, המרחק בקו ישר לא יוחזר. חובה לציין את קואור��י��ט��ת קו הרוחב וקו האורך:כדי להגדיר את פרמטר המקור, צריך לבצע קריאה ל-method
setOrigin()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
. -
קוד אזור
קוד האזור שמשמש לעיצוב התגובה, כולל עיצוב הכתובת, שצוין כערך של שני תווים של ccTLD (דומיין ברמה העליונה). רוב קודי ה-ccTLD זהים לקודי ISO 3166-1, אבל יש כמה יוצאים מן הכלל. לדוגמה, ה-ccTLD של בריטניה הוא uk (.co.uk), אבל קוד ISO 3166-1 שלה הוא gb (טכנית, עבור הישות 'ממלכת בריטניה הגדולה וצפון אירלנד').
אם מציינים קוד אזור לא תקין, ה-API מחזיר שגיאה
INVALID_ARGUMENT
. הפרמטר יכול להשפיע על התוצאות בהתאם לדין החל.כדי להגדיר את פרמטר קוד האזור, צריך לבצע קריאה ל-method
setRegionCode()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
. -
טוקן סשן
אסימוני סשן הם מחרוזות שנוצרות על ידי המשתמשים ועוקבות אחרי קריאות (חדשות) להשלמה אוטומטית – גם קריאות שמתבצעות דרך הווידג'ט וגם קריאות שמתבצעות באופן פרוגרמטי – כ'סשנים'. ההשלמה האוטומטית משתמשת באסימוני סשן כדי לקבץ את שלבי השאילתה והבחירה של חיפוש השלמה אוטומטית של משתמש לסשן נפרד למטרות חיוב. הסשן מתחיל כשהמשתמש מתחיל להקליד שאילתה, ומסתיים כשהוא בוחר מקום. בכל סשן יכולות להיות כמה שאילתות, ואחריהן בחירה של מקום אחד. אחרי שהסשן מסתיים, האסימון כבר לא תקף. האפליקציה צריכה ליצור אסימון חדש לכל סשן. מומלץ להשתמש בטוקנים של סשנים לכל הסשנים של השלמה אוטומטית פרוגרמטית (כשמטמיעים קטע או מפעילים השלמה אוטומטית באמצעות intent, ה-API מטפל בזה באופן אוטומטי).
ההשלמה האוטומטית משתמשת ב
AutocompleteSessionToken
כדי לזהות כל סשן. האפליקציה צריכה להעביר טוקן חדש של סשן בתחילת כל סשן חדש, ואז להעביר את אותו טוקן, יחד עם מזהה מקום, בקריאה הבאה אלfetchPlace()
כדי לאחזר את פרטי המקום שנבחר על ידי המשתמש.כדי להגדיר את הפרמטר של טוקן הסשן, צריך לבצע קריאה ל-method
setSessionToken()
כשיוצרים את האובייקטFindAutocompletePredictionsRequest
.מידע נוסף זמין במאמר בנושא אסימוני סשן.
דוגמאות להשלמה אוטומטית (חדש)
שימוש בהגבלת מיקום ובהטיה לפי מיקום
ההשלמה האוטומטית (חדש) משתמשת בהטיה לפי כתובת IP כברירת מחדל כדי לשלוט באזור החיפוש. בשיטת ההטיה לפי כתובת IP, ה-API משתמש בכתובת ה-IP של המכשיר כדי להטות את התוצאות. אפשר להשתמש בהגבלת מיקום או בהטיה לפי מיקום כדי לציין אזור לחיפוש, אבל אי אפשר להשתמש בשתי האפשרויות בו-זמנית.
הגבלת המיקום מציינת את האזור שבו יתבצע החיפוש. לא יוחזרו תוצאות מחוץ לאזור שצוין. בדוגמה הבאה נעשה שימוש בהגבלת מיקום כדי להגביל את הבקשה ל��גבלת מיקום מעגלית ברדיוס של 5,000 מטרים, עם מרכז בסן פרנסיסקו:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
בהטיה לפי מיקום, המיקום משמש כהטיה, כלומר המערכת יכולה להחזיר תוצאות שקשורות למיקום שצוין, כולל תוצאות מחוץ לאזור שצוין. בדוגמה הבאה משנים את הבקשה הקודמת כך שתשתמש בהטיה לפי מיקום:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setLocationBias(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
שימוש בסוגים ראשיים
אפשר להשתמש בפרמטר primary types כדי להגביל את התוצאות של בקשה לסוג מסוים שמופיע בטבלה א' ובטבלה ב'. אפשר לציין מערך של עד חמישה ערכים. אם לא מציינים סוג, כל הסוגים מוחזרים.
בדוגמה הבאה מצוינת מחרוזת שאילתה של 'כדורגל' ונעשה שימוש בפרמטר primary_types כדי להגביל את התוצאות למקומות מסוג "sporting_goods_store"
:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); final List<Place.Field> primaryTypes = Arrays.asList("sporting_goods_store"); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Soccer") .setIncludedPrimaryTypes(primaryTypes) .setLocationBias(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );
אם לא מציינים את הפרמטר primary_types, התוצאות יכולות לכלול עסקים מסוגים שלא רצויים, כמו "athletic_field"
.
שימוש במקור
כשכוללים את הפרמטר origin בבקשה, שמצוין כקואורדינטות של קו רוחב וקו אורך, ה-API כולל בתגובה את המרחק בקו ישר מהמקור ליעד (אפשר לגשת אליו באמצעות getDistanceMeters()
). בדוגמה הזו, המקור מוגדר למרכז סן פרנסיסקו:
Places.initializeWithNewPlacesApiEnabled(context, apiKey); final List<Field> placeFields = getPlaceFields(); LatLng center = new LatLng(37.7749, -122.4194); CircularBounds circle = CircularBounds.newInstance(center, /* radius = */ 5000); final FindAutocompletePredictionsRequest autocompletePlacesRequest = FindAutocompletePredictionsRequest.builder() .setQuery("Amoeba") .setOrigin(center) .setLocationRestriction(circle) .build()); placesClient.findAutocompletePredictions(autoCompletePlacesRequest) .addOnSuccessListener( (response) -> { List<AutocompletePrediction> predictions = response.getResult().getAutocompletePredictions(); } ).addOnFailureListener( exception -> { Log.e(TAG, "some exception happened" + exception.getMessage()); }) );