GeoDataApi.getAutocompleteПрогноз не работает

Я создаю приложение для Android, которое показывает функцию автозаполнения и извлекает прогнозы автозаполнения на картах Google, используя GeoDataApi.getAutocompletePredictions. Я следовал этому уроку -https://github.com/googlesamples/android-play-places/blob/master/PlaceComplete/Application/src/main/java/com/example/google/playservices/placecomplete/PlaceAutocompleteAdapter.java

Но почему-то это не работает нормально для меня.

Мой класс это -

public class GooglePlacesAutoCompleteAdapter extends ArrayAdapter implements Filterable {

    private ArrayList<PlaceAutocomplete> mResultList;
    GoogleApiClient mGoogleApiClient;
    private LatLngBounds mBounds;
    private AutocompleteFilter mPlaceFilter;
    int radius = 500;

    public GooglePlacesAutoCompleteAdapter(Context context, int textViewResourceId, GoogleApiClient googleApiClient,
                                           Location lastLocation, AutocompleteFilter filter) {
        super(context, textViewResourceId);
        LatLng currentLatLng = new LatLng(lastLocation.getLatitude(), lastLocation.getLongitude());
        mBounds = Utility.boundsWithCenterAndLatLngDistance(currentLatLng, 500, 500);
        mGoogleApiClient = googleApiClient;
        mPlaceFilter = filter;
    }

    @Override
    public int getCount() {
        return mResultList.size();
    }

    @Override
    public PlaceAutocomplete getItem(int index) {
        return mResultList.get(index);
    }

    @Override
    public android.widget.Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            public FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null && constraint.length() > 3 && constraint.length()%3 == 1) {
                    // Retrieve the autocomplete results.
                    mResultList = autocomplete(constraint.toString());

                    // Assign the data to the FilterResults
                    filterResults.values = mResultList;
                    filterResults.count = mResultList.size();
                }
                return filterResults;
            }

            @Override
            public void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        };
        return filter;
    }


    public ArrayList<PlaceAutocomplete> autocomplete(String input) {

        if (mGoogleApiClient.isConnected()) {

            // Submit the query to the autocomplete API and retrieve a PendingResult that will
            // contain the results when the query completes.
            PendingResult results = Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, input.toString(),
                    mBounds, mPlaceFilter);

            // This method should have been called off the main UI thread. Block and wait for at most 60s
            // for a result from the API.

            AutocompletePredictionBuffer autocompletePredictions = (AutocompletePredictionBuffer)results.await(60, TimeUnit.SECONDS);

            // Confirm that the query completed successfully, otherwise return null
            final Status status = autocompletePredictions.getStatus();
            if (!status.isSuccess()) {
                //Toast.makeText(getContext(), "Error contacting API: " + status.toString(),Toast.LENGTH_SHORT).show();
                //Log.e(TAG, "Error getting autocomplete prediction API call: " + status.toString());
                autocompletePredictions.release();
                return null;
            }

            // Copy the results into our own data structure, because we can't hold onto the buffer.
            // AutocompletePrediction objects encapsulate the API response (place ID and description).

            Iterator<AutocompletePrediction> iterator = autocompletePredictions.iterator();
            ArrayList resultList = new ArrayList<>(autocompletePredictions.getCount());
            while (iterator.hasNext()) {
                AutocompletePrediction prediction = iterator.next();
                // Get the details of this prediction and copy it into a new PlaceAutocomplete object.
                resultList.add(new PlaceAutocomplete(prediction.getPlaceId(), prediction.getDescription()));
            }

            // Release the buffer now that all data has been copied.
            autocompletePredictions.release();

            return resultList;
        }
        //Log.e(TAG, "Google API client is not connected for autocomplete query.");
        return null;

    }

    class PlaceAutocomplete {
        public CharSequence placeId;
        public CharSequence description;

        PlaceAutocomplete(CharSequence placeId, CharSequence description) {
            this.placeId = placeId;
            this.description = description;
        }

        @Override
        public String toString() {
            return description.toString();
        }
    }
}

Строка, в которой вызывается GeoDataApi.getAutocompletePredictions, переходит во внутренние классы с именем Filter.java, Log.java, handler.java, а затем Looper.java и бесконечно зацикливается там на строке 121 Looper.java (я уверен, студия sdk покажет код для Looper.java).

Это даже не выдача ошибки или переход к следующей строке, это просто не работает. Кроме того, я не могу увидеть трассировку стека ошибки.

Это фрагмент кода, который вызывает это -

if (mLastLocation != null) {
           GooglePlacesAutoCompleteAdapter placesAdapter = new GooglePlacesAutoCompleteAdapter(this, R.layout.item_list, mGoogleApiClient, mLastLocation, null);
            autoCompView.setAdapter(placesAdapter);
            autoCompView.setOnItemClickListener(this);
        }

Может кто-нибудь сказать, пожалуйста, что я здесь делаю не так? Пожалуйста, любая помощь будет принята с благодарностью. Мне нужно, чтобы это заработало как можно скорее.

PS - я передаю mPlaceFilter как ноль здесь.

Ответы на вопрос(0)

Ваш ответ на вопрос