Tôi gặp sự cố lạ với một địa điểm cụ thể. Bất kỳ ý tưởng ?Không nhận được Địa điểm cụ thể từ PlaceBuffer
Mã này hoạt động tốt, nhưng đối với một địa điểm (vô tình được chọn vì bắt đầu bằng aaa - chỉ để thử nghiệm) không thể lấy đối tượng Địa điểm từ bộ đệm. Ngay cả một truy vấn đã thành công (log: PlaceAutocompleteAdapt ﹕ Query hoàn thành. Đã nhận được 5 dự đoán.) Unfortunatelly, ứng dụng bị lỗi. Nó làm cho API này rất nguy hiểm, những gì khác nên được xử lý trong cố gắng nắm bắt khối chắc chắn?
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);
}
});
LOG:
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 A.s., 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)
PlaceAutocomplete là gì? Có thể bạn đang nhận được ID xấu từ đó. Tôi đã thử kiểm tra ID từ thông điệp tường trình của bạn "ChIJcYm-YVpzE0cR-OIfKj2KTKc" và tôi không nhận được bất kỳ kết quả nào. Có vẻ như không có chỗ nào với ID đó. Trong trường hợp đó, API cung cấp cho bạn một vùng đệm với các kết quả bằng không bên trong nó. Nếu bạn gọi places.get (0) bạn đang cố gắng lấy ra một thứ không tồn tại. Vấn đề với lý thuyết này là places.getStatus(). IsSuccess() sẽ trả về false trong trường hợp đó, mà bạn đã kiểm tra. Cân nhắc việc ghi lại places.getCount() để hỗ trợ gỡ lỗi. –
PlaceAutocomplete là API từ google https://developers.google.com/places/android/autocomplete Có, placeID trả về kết quả trống. Nhưng tại sao tôi nhận nó ở vị trí đầu tiên? Khi trạng thái là THÀNH CÔNG và đếm là 5 (đăng nhập: Đã nhận được 5 dự đoán.). Làm thế nào có thể bộ đệm trống? Dường như một lỗi) -: – Wooff
hãy đảm bảo thêm '.addApi (Places.GEO_DATA_API)' vào GoogleApiClient –