Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
148 views
in Technique[技术] by (71.8m points)

android - Migrating to New Places API

Im getting error when migrating to New Places API. the previous google maps api was deprecated and i don't now how to rewrite code please need help best regards Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

 import android.content.Context;
    import android.graphics.Typeface;
    import android.text.style.CharacterStyle;
    import android.text.style.StyleSpan;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Filter;
    import android.widget.Filterable;
    import android.widget.TextView;
    import android.widget.Toast;
    import com.google.android.gms.common.data.DataBufferUtils;
    import com.google.android.gms.location.places.AutocompleteFilter;
    import com.google.android.gms.location.places.AutocompletePrediction;
    import com.google.android.gms.location.places.AutocompletePredictionBufferResponse;
    import com.google.android.gms.location.places.GeoDataClient;
    import com.google.android.gms.maps.model.LatLngBounds;
    import com.google.android.gms.tasks.RuntimeExecutionException;
    import com.google.android.gms.tasks.Task;
    import com.google.android.gms.tasks.Tasks;
    import java.util.ArrayList;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    
    
    public class PlaceAutocompleteAdapter
            extends ArrayAdapter<AutocompletePrediction> implements Filterable {
    
        private static final String TAG = "PlaceAutoComplete";
        private static final CharacterStyle STYLE_BOLD = new StyleSpan(Typeface.BOLD);
        private ArrayList<AutocompletePrediction> mResultList;
        private GeoDataClient mGeoDataClient;
        private LatLngBounds mBounds;
    
       
        private AutocompleteFilter mPlaceFilter;
    
       
        public PlaceAutocompleteAdapter(Context context, GeoDataClient geoDataClient,
                                        LatLngBounds bounds, AutocompleteFilter filter) {
            super(context, android.R.layout.simple_expandable_list_item_2, android.R.id.text1);
            mGeoDataClient = geoDataClient;
            mBounds = bounds;
            mPlaceFilter = filter;
        }
    
      
        public void setBounds(LatLngBounds bounds) {
            mBounds = bounds;
        }
    
        
        @Override
        public int getCount() {
            return mResultList.size();
        }
    
       
        @Override
        public AutocompletePrediction getItem(int position) {
            return mResultList.get(position);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);
    
            // Sets the primary and secondary text for a row.
            // Note that getPrimaryText() and getSecondaryText() return a CharSequence that may contain
            // styling based on the given CharacterStyle.
    
            AutocompletePrediction item = getItem(position);
    
            TextView textView1 = (TextView) row.findViewById(android.R.id.text1);
            TextView textView2 = (TextView) row.findViewById(android.R.id.text2);
            textView1.setText(item.getPrimaryText(STYLE_BOLD));
            textView2.setText(item.getSecondaryText(STYLE_BOLD));
    
            return row;
        }
    
       
        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults results = new FilterResults();
    
                    // We need a separate list to store the results, since
                    // this is run asynchronously.
                    ArrayList<AutocompletePrediction> filterData = new ArrayList<>();
    
                    // Skip the autocomplete query if no constraints are given.
                    if (constraint != null) {
                        // Query the autocomplete API for the (constraint) search string.
                        filterData = getAutocomplete(constraint);
                    }
    
                    results.values = filterData;
                    if (filterData != null) {
                        results.count = filterData.size();
                    } else {
                        results.count = 0;
                    }
    
                    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.
                        mResultList = (ArrayList<AutocompletePrediction>) results.values;
                        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 ArrayList<AutocompletePrediction> getAutocomplete(CharSequence constraint) {
            Log.i(TAG, "Starting autocomplete query for: " + constraint);
    
            // Submit the query to the autocomplete API and retrieve a PendingResult that will
            // contain the results when the query completes.
            Task<AutocompletePredictionBufferResponse> results =
                    mGeoDataClient.getAutocompletePredictions(constraint.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.
            try {
                Tasks.await(results, 60, TimeUnit.SECONDS);
            } catch (ExecutionException | InterruptedException | TimeoutException e) {
                e.printStackTrace();
            }
    
            try {
                AutocompletePredictionBufferResponse autocompletePredictions = results.getResult();
    
                Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
                        + " predictions.");
    
                // Freeze the results immutable representation that can be stored safely.
                return DataBufferUtils.freezeAndClose(autocompletePredictions);
            } catch (RuntimeExecutionException e) {
                // If the query did not complete successfully return null
                Toast.makeText(getContext(), "Error contacting API: " + e.toString(),
                        Toast.LENGTH_SHORT).show();
                Log.e(TAG, "Error getting autocomplete prediction API call", e);
                return null;
            }
        }
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
...