Kotlin Android Places API Autocomplete - PullRequest
       63

Kotlin Android Places API Autocomplete

0 голосов
/ 28 апреля 2020

спасибо за просмотр. Как следует из названия, я столкнулся с довольно «странной» проблемой в моем текущем Kotlin проекте. В моем Приложении пользователь может нажать на кнопку (или текстовый ввод, работающий как кнопка), а затем появляется новое намерение, где пользователь может ввести местоположение.

Небольшой фрагмент здесь:

R.id.et_location -> {
            try{
                // This is the list of fields that need to be passed
                val fields = listOf(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG, Place.Field.ADDRESS)
                // Start the autocomplete intent with a unique request code.
                val intent = Autocomplete.IntentBuilder(AutocompleteActivityMode.FULLSCREEN, fields).build(this@AddHappyPlaceActivity)
                startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE)
        }catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(this, "Couldnt load it", Toast.LENGTH_SHORT).show()}

Все это работает довольно хорошо, поэтому окно появляется, но когда я начинаю набирать что-то вроде "Dub" (для Дубая, например), он показывает несколько записей, но если я наберу 1-2 символа больше, он внезапно говорит: «Не удается загрузить результаты поиска». Иногда поиск не работает вообще. Я погуглил эту проблему, и люди предположили, что может быть что-то не так с API-ключом, но если что-то не так с ключом, он не будет работать в первую очередь и просто закроет Intent (я попробовал).

Я попробовал несколько вещей с ключом API. Для начала у меня были проблемы с первым ключом, который я создал, что он не работал вообще. Второй ключ, который я сгенерировал, работал частично (моя текущая ситуация). Первый ключ ограничен моим пакетом / sha1. My API Keys

Второй ключ, как вы видите, не имеет никаких ограничений, но работает лучше, чем первый. Теперь я не уверен, что это мой API-ключ, который вызывает эту проблему, или мой код. Ниже я поделюсь соответствующим кодом.

AndroidManifest. xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eu.sampa.happyPlaces">
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Several permissions -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".activities.HappyPlaceDetailActivity"
            android:label="HAPPY PLACE DETAILS"
            android:screenOrientation="portrait"
            android:theme="@style/CustomNoActionBarTheme" />
        <activity
            android:name=".activities.AddHappyPlaceActivity"
            android:label="ADD HAPPY PLACE"
            android:screenOrientation="portrait"
            android:theme="@style/CustomNoActionBarTheme" />
        <activity android:name=".activities.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

google_maps_api. xml (я удалил свой ключ SHA1 и ключ API перед публикацией здесь)

<resources>
    <!--
    TODO: Before you run your application, you need a Google Maps API key.

    To get one, follow this link, follow the directions and press "Create" at the end:

    https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=60:BF:DE:FE:3C:6F:DA:3B:56:09:E7:B7:BB:5F:FC:F8:AE:00:DC:0D%3Beu.sampa.happyPlaces.activities

    You can also add your credentials to an existing key, using these values:

    Package name:
    eu.sampa.happyPlaces.activities

    SHA-1 certificate fingerprint:
    MY SHA1 KEY

    Alternatively, follow the directions here:
    https://developers.google.com/maps/documentation/android/start#get-key

    Once you have your key (it starts with "AIza"), replace the "google_maps_key"
    string in this file.
    -->
    <string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">MY API KEY</string>
</resources>

И вот, наконец, моя активность, где обрабатываются все необходимые вещи (извините за длину ... но я прокомментировал все функции, касающиеся этой проблемы, с комментарием "/ / Для Places API ", просто используйте функцию поиска при необходимости)

AddHappyPlaceActivity.kt

1 Ответ

1 голос
/ 29 апреля 2020

В случае автозаполнения Google Адресов Google вы видите, что вам не хватает Биллинг аккаунта .

1) Войдите в Google Cloud Platform

2) Откройте меню биллинга

3) Если у вас есть предыдущий платежный аккаунт, вы можете назначить его в свой проект Google Cloud. Если нет, создайте новый платежный аккаунт, используя свою кредитную / дебетовую карту.

4) Попробуйте API-интерфейс платежного аккаунта KEY, он будет работать нормально

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

Happy Coding 101

...