Фрагменты автозаполнения автоматически закрываются - PullRequest
1 голос
/ 08 марта 2020

В моем приложении android я внедряю API мест Google. Я открываю Google Auto Complete TextView, и я пытаюсь ввести. Как только я начал печатать, фрагмент автоматически закрывается. Я использовал и намерение, и слушателя, но оба дают одну и ту же проблему. Вот код:

Код для слушателя:

autocompleteSupportFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));
autocompleteSupportFragment.setTypeFilter(TypeFilter.CITIES);
autocompleteSupportFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
           @Override
           public void onPlaceSelected(@NonNull Place place) {
               Toast.makeText(getContext(), ""+place.getName(), Toast.LENGTH_SHORT).show();
           }

           @Override
           public void onError(@NonNull Status status) {

           }
       });

Код для намерения

 lc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Autocomplete.IntentBuilder(
                        AutocompleteActivityMode.FULLSCREEN, fields)
                        .build(getContext());
                startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);
            }
        });

 @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == AUTOCOMPLETE_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                Place place = Autocomplete.getPlaceFromIntent(data);
                Toast.makeText(getContext(), ""+place.getName(), Toast.LENGTH_SHORT).show();
            } else if (resultCode == AutocompleteActivity.RESULT_ERROR) {
                // TODO: Handle the error.
                Status status = Autocomplete.getStatusFromIntent(data);
                Log.i(TAG, status.getStatusMessage());
            } else if (resultCode == RESULT_CANCELED) {
                // The user canceled the operation.
            }

        }

    }

Код для макета:

<fragment
                android:id="@+id/place_autocomplete_fragment1"
                android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10sp" />

        </LinearLayout>

I видел другие решения, но это не помогло. Какие изменения я должен иметь. Я также включил Google места в консоли.

Ответы [ 3 ]

1 голос
/ 08 марта 2020

Это происходит, когда проекту не разрешено использовать API-ключ, который вы пытаетесь использовать.

попробуйте использовать ссылку из файла google_maps_api.xml, который создается автоматически при использовании мастера.

Он имеет формат

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=SHA1KEY;packagename&pli=1

пример: если ваш пакет com.example.myapplication и ваш ключ SHA-1 61:DB:7B:CB:A9:86:62:51:CF:88:9E:AC:ED:PC:E8:2E:CB:C6:43:60

https://console.developers.google.com/flows/enableapi?apiid=maps_android_backend&keyType=CLIENT_SIDE_ANDROID&r=61: DB: 7B: CB: A9: 86: 62: 51: CF: 88: 9E: А C: ED: Р * 1 020 *: Е8: 2E: СВ: С6: 43: 60 ; com.example.myapplication & пли = 1

0 голосов
/ 08 марта 2020

У меня была такая же проблема. Вы должны инициализировать так:

if (!Places.isInitialized()) {
   Places.initialize(getApplicationContext(), "Your_Api_Key");
}
PlacesClient placesClient = Places.createClient(this);
0 голосов
/ 08 марта 2020

Вы должны зарегистрировать свой статус в методе onError, чтобы узнать проблему

...