5

Der Autocomplete-Widget-Dienst in der Google Places API für Android funktioniert nicht wie erwartet. Ich habe das Fragment in meine XML-Seite eingefügt und auch die Höreraktivität zu meiner onCreate() hinzugefügt.
Dann fange ich an, das Autocomplete-Fragment auszuführen, ich klicke auf den ersten Buchstaben des Worts, das ich durchsuchen möchte, und plötzlich wird onError() ausgeführt, statt Vorschläge anzuzeigen, und es wird geschlossen.PlaceAutoCompleteFragment in Android zeigt keine Vorschläge und schließt nach Eingabe des ersten Buchstabens

<?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> 

Die mainactivity hierfür ist:

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); 

}

+0

, was der Fehler ist log den Fehler aus dem placeautocmplete und poste das Protokoll hier –

+0

der Status {status = PLACES_API_ACCESS_NOT_CONFIGURED, Auflösung = null} – Akhil

+0

dies könnte Ihnen helfen - http: // stackoverflow.com/questions/30434238/place-picker-automatisch-close-after-launch Wenn das nicht funktioniert, informiere mich. Ich werde eine vollständige Antwort posten. –

Antwort

7

Sie vermissen wahrscheinlich einen API-Schlüssel, die für die Verwendung von Google Places API erforderlich ist. Schauen Sie sich this link an. Wenn du alles in der Verbindung angegeben, fügen auch diesen Code auf Ihre 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" /> 
+0

Ich habe den API-KEY-Code für die Karte. Soll ich einen neuen API KEY erstellen oder kann ich denselben Schlüssel verwenden? – Akhil

+0

Ich habe dies, wenn ich es protokolliert: Status {StatusCode = PLACES_API_ACCESS_NOT_CONFIGURED, Auflösung = null} – Akhil

+1

Ich denke, dass API-Schlüssel in Ordnung sein sollte. Stellen Sie jedoch sicher, dass Sie Ihre Anwendung in der Entwicklerkonsole aktivieren. Dort müssen Sie den Namen Ihres Anwendungspakets und den SHA-1 der Anwendung angeben. Weitere Informationen zum Aktivieren der Anwendung in der Entwicklerkonsole und [diesen Link] (http://stackoverflow.com/questions/15727912/sha-1-fingerprint-of-keystore-certificate) finden Sie in der Antwort auf die Antwort, um Informationen darüber zu erhalten, wie SHA- 1. –

0

MMAP müssen vor dem Gebrauch initialied werden von mMap.setOnMapClickListener (...., die gotoLocation (lat, lng, 15) ?., wie unten zu sehen ist:

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));     
      }