无法从PlaceBuffer获取特定的地点

我有一个特定的地方奇怪的问题。 任何想法 ?

此代码工作正常,但对于一个地方(意外select,因为aaa开始 – 只是为了testing)它不能从缓冲区获取地方对象。 即使是一个查询成功(日志:PlaceAutocompleteAdapt:查询完成,收到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) 

Related of "无法从PlaceBuffer获取特定的地点"

添加条件&& 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(); } }); 

需要places.getCount()检查。 请参阅https://developers.google.com/places/android-api/place-details

我也有这个相同的问题。

我从item.getPlaceId()方法得到了Place ID: ChIJD1eejrW35zsRDFfkT-PSbm4 ,但是当我通过Place ID反向地理编码时 ,我没有得到任何结果。

可能有很多地方会返回相同的结果,所以我希望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);