Не удалось получить конкретное место из PlaceBuffer

У меня странная проблема с одним конкретным местом. Есть идеи ?

Этот код работает нормально, но для одного места (случайно выбранного из-за запусков с aaa – только для теста) он не может получить объект Place из буфера. Даже запрос был успешным (log: PlaceAutocompleteAdapt: ​​Query завершен. Получено 5 прогнозов.) К сожалению, это приложение сбой. Это делает этот API очень опасным, что еще нужно обработать в блоке try catch?

addressAutocompleteText.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /* Retrieve the place ID of the selected item from the Adapter. The adapter stores each Place suggestion in a PlaceAutocomplete object from which we read the place ID. */ final PlaceAutocompleteAdapter.PlaceAutocomplete item = ((MainActivity) getActivity()).mAdapter.getItem(position); final String placeId = String.valueOf(item.placeId); Log.i(TAG, "Autocomplete item selected: " + item.description); /* Issue a request to the Places Geo Data API to retrieve a Place object with additional details about the place. */ PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi.getPlaceById(((MainActivity) getActivity()).mGoogleApiClient, placeId); placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() { @Override public void onResult(PlaceBuffer places) { if (!places.getStatus().isSuccess()) { // Request did not complete successfully Log.e(TAG, "Place query did not complete. Error: " + places.getStatus().toString()); places.release(); return; } try { // Get the Place object from the buffer. final Place place = places.get(0); // Throws IllegalStateException if (null != place) { coordinate = new Coordinate(place.getLatLng().latitude, place.getLatLng().longitude); } } catch (IllegalStateException e) { Log.w(TAG, "Fail to get place or its coordinates"); } places.release(); } }); // hideKeyboard(addressAutocompleteText); Log.i(TAG, "Called getPlaceById to get Place details for " + item.placeId); } }); 

ЖУРНАЛ:

 Starting autocomplete query for: aaa 06-05 08:05:29.618 6403-7777/...I/PlaceAutocompleteAdapt﹕ Query completed. Received 5 predictions. 06-05 08:05:39.248 6403-6403/...I/FavoriteLocationCreateFragment﹕ Autocomplete item selected: AAA Auto As, Zlín, Česká republika 06-05 08:06:01.278 6403-6403/...I/FavoriteLocationCreateFragment﹕ Called getPlaceById to get Place details for ChIJcYm-YVpzE0cR-OIfKj2KTKc 06-05 08:30:46.823 19727-19727/... D/AndroidRuntime﹕ Shutting down VM 06-05 08:30:46.833 19727-19727/... E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: ..., PID: 19727 java.lang.IllegalStateException at com.google.android.gms.common.internal.zzv.zzP(Unknown Source) at com.google.android.gms.common.data.zzc.zzaB(Unknown Source) at com.google.android.gms.common.data.zzc.<init>(Unknown Source) at com.google.android.gms.location.places.internal.zzq.<init>(Unknown Source) at com.google.android.gms.location.places.internal.zzo.<init>(Unknown Source) at com.google.android.gms.location.places.PlaceBuffer.get(Unknown Source) at ....FavoriteLocationCreateFragment$3$1.onResult(FavoriteLocationCreateFragment.java:129) at ....FavoriteLocationCreateFragment$3$1.onResult(FavoriteLocationCreateFragment.java:117) at com.google.android.gms.common.api.AbstractPendingResult$CallbackHandler.deliverResultCallback(Unknown Source) at com.google.android.gms.common.api.AbstractPendingResult$CallbackHandler.handleMessage(Unknown Source) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

Нужна функция places.getCount (). См. Здесь https://developers.google.com/places/android-api/place-details.

Добавить условие && places.getCount() > 0

Пример из документации:

 Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId) .setResultCallback(new ResultCallback<PlaceBuffer>() { @Override public void onResult(PlaceBuffer places) { if (places.getStatus().isSuccess() && places.getCount() > 0) { final Place myPlace = places.get(0); Log.i(TAG, "Place found: " + myPlace.getName()); } else { Log.e(TAG, "Place not found"); } places.release(); } }); 

У меня тоже такая же проблема.

Я получаю Place ID: ChIJD1eejrW35zsRDFfkT-PSbm4 из item.getPlaceId() , но когда я делаю обратный геокодирование по идентификатору места , я не получаю никаких результатов.

Может быть много мест, которые возвращают тот же результат, что и это, поэтому я надеюсь, что Google распознает эту проблему.

Но сейчас я это сделал:

 /** * Callback for results from a Places Geo Data API query that shows the first place result in * the details view on screen. */ private ResultCallback<PlaceBuffer> fromPlaceResultCallback = new ResultCallback<PlaceBuffer>() { @Override public void onResult(@NonNull PlaceBuffer places) { if (!places.getStatus().isSuccess()) { places.release(); return; } // Get the Place object from the buffer. if(places.getCount() > 0) { // Got place details Place place = places.get(0); // Do your stuff } else { // No place details Toast.makeText(SelectLocation.this, "Place details not found.", Toast.LENGTH_LONG).show(); } places.release(); } }; 

Это произошло со мной, если placeId ошибочно / недействительно в вызове

 Places.GeoDataApi.getPlaceById(((MainActivity) getActivity()).mGoogleApiClient, placeId);