wake-up-neo.com

Fehler bei der Google Places-API für Android: Status {statusCode = NETWORK_ERROR, Auflösung = null}

Ich habe ein Projekt unter der Google Developer Console erstellt und wollte Google Places API für Android verwenden. Ich habe die API aktiviert und in meine Android-Anwendung gemäß den Richtlinien auf der Google-Entwicklerwebsite ( https://developers.google.com/places/Android/start ) integriert. Die API gibt diesen Fehler aus und nach Stunden (und Tagen) des Debuggens und der Suche im Internet konnte ich das Problem nicht eingrenzen. Über Hinweise, warum dieser Fehler auftritt, würden wir uns sehr freuen.

Fehler: Status{statusCode=NETWORK_ERROR, resolution=null}

Das Folgende ist die Funktion aus dem Google-Beispielcode, in der Places Auto Complete aufgerufen wird.

private ArrayList<PlaceAutocomplete> getAutocomplete(CharSequence constraint) {
    if (mGoogleApiClient != null) {
        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.
        PendingResult<AutocompletePredictionBuffer> results =
                Places.GeoDataApi
                        .getAutocompletePredictions(mGoogleApiClient, 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.
        AutocompletePredictionBuffer autocompletePredictions = 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;
        }

        Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
                + " predictions.");

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

AndroidManifiest.xml-Berechtigungen

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature Android:glEsVersion="0x00020000" Android:required="true"/>
8
Sharief Shaik

Sie können null anstelle der AutocompleteFilter-Eigenschaft in die getAutocompletePredictions-Methode einfügen, wenn Sie Vorhersagen von beliebigen Typen erhalten möchten.

3
Eldar Miensutov

Himanshu hat recht; Es passiert mir auch, ich wollte nach Städten filtern und fügte hinzu:

AutocompleteFilter.create(Arrays.asList(
    Place.TYPE_LOCALITY, Place.TYPE_ADMINISTRATIVE_AREA_LEVEL_3));

dieses Ergebnis in Status {statusCode = NETWORK_ERROR, Auflösung = null}

Nicht alle Konstanten von Place stehen für die Filterung mit AutocompleteFilter zur Verfügung, nur zwei sind auf Android verfügbar: Place.TYPE_GEOCODE und Place.TYPE_ESTABLISHMENT ("Adresse" wird in der Dokumentation angezeigt, in Place jedoch nicht als konstant

Lesen Sie sorgfältig hier: https://developers.google.com/places/supported_types#table3

Wenn eine andere Konstante (z. B. Place.TYPE_LOCALITY) verwendet wird, führt die Anforderung zu einem verwirrenden Statusfehler.

7
ciprian
Please ensure the folowing.

1. The package name given in console registration page is same as that of actvity/fragment we are using. ie; if are using this auto search button inside com.example.rajeesh.UI.fragements.SearchFragment, 
then inside console registration page  package name should be 
com.example.rajeesh.UI.fragements
This is different from the package name we given in manifest file.

2. Inside manifest please  change 
  <meta-data
                Android:name="com.google.Android.maps.v2.API_KEY"
                Android:value="@string/google_maps_api_key" />
to

      <meta-data
                Android:name="com.google.Android.geo.API_KEY"
                Android:value="@string/google_maps_api_key" />


3. Enable Google Places API for Android in console page.
4
rajeesh

Für mich hatte ich Meta-Tag für Map und Geo gegeben.

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="*********************"/>
<meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="**********************" />

dann entfernte ich Map meta und dann fing es an zu arbeiten.

2
Tarun Varshney

Das Problem mit Ihrem Code könnte darin bestehen, dass Sie in Ihrem AutoCompleteFilter einen anderen Ortstyp als Einrichtung, Adresse und Geocode verwenden. Derzeit werden nur diese drei unterstützt. Codeteile aus den Google-Dokumenten.

Optional: Ein AutocompleteFilter mit einem Satz von Ortstypen, mit dem Sie die Ergebnisse auf einen oder mehrere Ortstypen beschränken können. Die folgenden Platztypen werden im Filter unterstützt: Geocode - Gibt nur Geokodierungsergebnisse zurück, nicht jedoch Unternehmen. Im Allgemeinen verwenden Sie diese Anforderung, um Ergebnisse zu disambiguieren, bei denen der angegebene Standort möglicherweise unbestimmt ist. address - Gibt nur Ergebnisse der automatischen Vervollständigung mit einer genauen Adresse zurück. Im Allgemeinen verwenden Sie diese Anfrage, wenn Sie wissen, dass der Benutzer nach einer vollständig angegebenen Adresse sucht. Einrichtung - Gibt nur Orte zurück, die Unternehmen sind.

0