Akhil
Akhil

Reputation: 531

PlaceAutoCompleteFragment in android not showing suggestions and closes after entering the first letter

The autocomplete widget service in the Google Places API for Android is not working as expected. I have included the fragment in my xml page and also added the listener activity to my onCreate().
Then I start executing the autocomplete fragment, I click the first letter of the word I want to search and suddenly instead of showing suggestions the onError() gets executed and it closes.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.akhil.maplocation.MapsActivity" />
    <fragment
        android:id="@+id/place_autocomplete_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
        />
</RelativeLayout>

The mainactivity for this is:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    LatLng fromadd;
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
           PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
                    getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);


            autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
                @Override
                public void onPlaceSelected(Place place) {
                    // TODO: Get info about the selected place.
                    fromadd = place.getLatLng();
                    double lat = fromadd.latitude;
                    double lng = fromadd.longitude;        
                    gotoLocation(lat, lng, 15);
                }

                @Override
                public void onError(Status status) {
                    // TODO: Handle the error.
                    Toast.makeText(getBaseContext(),"failure",Toast.LENGTH_LONG).show();
                }
            });
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(latLng);
                fromadd = latLng;
                markerOptions.title(latLng.latitude + ":" + latLng.longitude + " " + latLng.toString());
                mMap.clear();
                mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
                mMap.addMarker(markerOptions);
            }
        });


        mapFragment.getMapAsync(this);
}

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {                
            return;
        }
        mMap.setMyLocationEnabled(true);

}

Upvotes: 6

Views: 7536

Answers (2)

NTsola
NTsola

Reputation: 71

mMap need to be initialied before use of mMap.setOnMapClickListener(.... ; the gotoLocation(lat,lng,15) has to look as below :

private void gotoLocation(double lat, double lng, int i) {
                // TODO Auto-generated method stub   

                 Marker myMarker = map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.home))
                .position(p1)
                .snippet("Lat:" + lat + "Lng:" + lng)
                .title("HOME"));

                 map = ((MapFragment) getFragmentManager()
                        .findFragmentById(R.id.map2)).getMap();
                map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), i));                  
            }    

Upvotes: 0

L. Kolar
L. Kolar

Reputation: 555

You probably miss an API key, which is required for use of Google Places API. Check out this link. When you do all things specified in the link, also add this code to your AndroidManifest

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

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

Upvotes: 7

Related Questions