位置自动完成功能无法正常工作

问题描述 投票:0回答:1

我在我的项目中使用位置自动完成新SDK。

实现'com.google.android.libraries.places:places:2.1.0'

Autocompletetextview:我正在使用它来显示数据。问题是它是第一次正常运行,而不是第二次正常运行。该列表未显示在第二次和某人的地址。有时我得到错误:PlaceAutoCompleteAdapter:找不到位置:9010。请帮助解决此问题。

public class PlaceAutocompleteAdapterNew extends ArrayAdapter<AutocompletePrediction> implements Filterable {
        PlacesClient placesClient;
        AutocompleteSessionToken token;
        private static final CharacterStyle STYLE_BOLD = new StyleSpan(Typeface.BOLD);
        private List<AutocompletePrediction> mResultList;
        private List<AutocompletePrediction> tempResult;
        Context context;
        private String TAG = "PlaceAutoCompleteAdapter";

        public PlaceAutocompleteAdapterNew(Context context, PlacesClient placesClient, AutocompleteSessionToken token) {
            super(context, android.R.layout.simple_expandable_list_item_1, android.R.id.text1);
            this.context = context;
            this.placesClient = placesClient;
            this.token = token;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);

            AutocompletePrediction item = getItem(position);

            TextView textView1 = (TextView) row.findViewById(android.R.id.text1);
            textView1.setText(item.getPrimaryText(STYLE_BOLD));
            return row;
        }

        @Override
        public int getCount() {
            if (mResultList == null)
                return 0;
            else
                return mResultList.size();
        }

        @Override
        public AutocompletePrediction getItem(int position) {
            return mResultList.get(position);
        }

        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults results = new FilterResults();
                    // Skip the autocomplete query if no constraints are given.
                    if (constraint != null) {
                        // Query the autocomplete API for the (constraint) search string.
                        mResultList = getAutoComplete(constraint);
                        if (mResultList != null) {
                            // The API successfully returned results.
                            results.values = mResultList;
                            results.count = mResultList.size();
                        }
                    }
                    return results;

                }

                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    if (results != null && results.count > 0) {
                        // The API returned at least one result, update the data.
                        notifyDataSetChanged();
                    } else {
                        // The API did not return any results, invalidate the data set.
                        notifyDataSetInvalidated();
                    }
                }

                @Override
                public CharSequence convertResultToString(Object resultValue) {
                    // Override this method to display a readable result in the AutocompleteTextView
                    // when clicked.
                    if (resultValue instanceof AutocompletePrediction) {
                        return ((AutocompletePrediction) resultValue).getFullText(null);
                    } else {
                        return super.convertResultToString(resultValue);
                    }
                }
            };
        }

        private List<AutocompletePrediction> getAutoComplete(CharSequence constraint) {
            // Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
            // and once again when the user makes a selection (for example when calling fetchPlace()).
            // AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();
            // Create a RectangularBounds object.

            // Use the builder to create a FindAutocompletePredictionsRequest.
            FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
                    .setTypeFilter(TypeFilter.ADDRESS)
                    .setSessionToken(token)
                    .setQuery(constraint.toString())
                    .build();

            placesClient.findAutocompletePredictions(request).addOnSuccessListener(new OnSuccessListener<FindAutocompletePredictionsResponse>() {
                @Override
                public void onSuccess(FindAutocompletePredictionsResponse response) {
                    for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
                        Log.e(TAG, prediction.getPrimaryText(null).toString());
                    }
                    tempResult = response.getAutocompletePredictions();
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    if (exception instanceof ApiException) {
                        ApiException apiException = (ApiException) exception;
                        Log.e(TAG, "Place not found: " + apiException.getStatusCode());
                    }
                }
            });
            return tempResult;
        }
    }
android api maps
1个回答
0
投票

错误代码表明Places api结算存在问题,代码9010表示您超出了结算所允许的查询限制。地方信息自动填充不是免费的,但是Google允许您在没有设置计费帐户的情况下尝试几次,然后再拒绝请求。

© www.soinside.com 2019 - 2024. All rights reserved.