Google Places API для Android ошибка: статус{statusCode=сетевая ошибка, разрешение=null}
Я создал проект под консолью разработчика google и хотел использовать Google Places API для Android. Я включил API и интегрирован в мое приложение для android в соответствии с рекомендациями на веб-сайте разработчика Google (https://developers.google.com/places/android/start). API дает эту ошибку, и после нескольких часов (и дней) отладки и поиска в Интернете я не мог сузить проблему. Любые выводы будут оценены о том, почему эта ошибка приходит вверх.
ошибка: Status{statusCode=NETWORK_ERROR, resolution=null}
ниже приведена функция из примера кода google, где вызывается автозаполнение мест.
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
<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"/>
6 ответов
Вы можете поставить null
вместо свойства AutocompleteFilter в getAutocompletePredictions
метод, если вы хотите получить прогнозы любых типов.
Химаншу прав; это случается и со мной, я хотел фильтровать по городам и добавил:
AutocompleteFilter.create(Arrays.asList(
Place.TYPE_LOCALITY, Place.TYPE_ADMINISTRATIVE_AREA_LEVEL_3));
этот результат в состоянии{statusCode=NETWORK_ERROR, resolution=null}
не все постоянные от Place
доступны для фильтрации с помощью AutocompleteFilter, только два доступны на Android:Place.TYPE_GEOCODE
и Place.TYPE_ESTABLISHMENT
("адрес" отображается в документации, но не как константа в Place
)
читай внимательно вот:https://developers.google.com/places/supported_types#table3
если любая другая константа (например Place.TYPE_LOCALITY
) используются запрос приведет к ошибке запутанного состояния.
для меня, я дал метатег для карты и гео.
<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="**********************" />
затем я удалил мета-карту, а затем она начала работать.
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.
проблема с вашим кодом может заключаться в том, что вы используете тип места, отличный от установки, адреса и геокода в вашем Автокомплектном фильтре. На данный момент поддерживаются только эти три. Части кода из документов Google.
необязательно: Автокомплектный фильтр, содержащий набор типов мест, которые можно использовать для ограничения результатов одним или несколькими типами мест. Этот в фильтре поддерживаются следующие типы мест: geocode-Returns только результаты геокодирования, а чем бизнес. Как правило, вы используете этот запрос для устранения неоднозначности результатов, где указанное местоположение может будьте неопределенны. address-возвращает только результаты автозаполнения с точный адрес. Как правило, вы используете этот запрос, когда вы знаете пользователь будет искать полностью указанный адрес. учреждение – Возвращает только места, которые являются предприятиями.
Я думаю, вы должны опубликовать свои разрешения манифеста.
также проверить этой. Аналогичное сообщение об ошибке, вызванное неправильным именем пакета в Google console