Android Places SDK 从可能性中获取地点 ID

标签 android google-places-api google-places

我正在开发一个 Android 项目,我想使用当前地点 ID。我正在使用 Google Places SDK。我可以获得可能性和名称。但我无法获得 placeID。你可以从这里看到代码。 https://developers.google.com/places/android-sdk/current-place

    // Use fields to define the data types to return.
List<Place.Field> placeFields = Collections.singletonList(Place.Field.NAME);

// Use the builder to create a FindCurrentPlaceRequest.
FindCurrentPlaceRequest request =
        FindCurrentPlaceRequest.newInstance(placeFields);

// Call findCurrentPlace and handle the response (first check that the user has granted permission).
if (ContextCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    Task<FindCurrentPlaceResponse> placeResponse = placesClient.findCurrentPlace(request);
    placeResponse.addOnCompleteListener(task -> {
        if (task.isSuccessful()){
            FindCurrentPlaceResponse response = task.getResult();
            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {


                      //when I try to get id it shows null.

                      String id = placeLikelihood.getPlace().getId();
                      Log.d(TAG, "place id: "+id);


                Log.i(TAG, String.format("Place '%s' has likelihood: %f",
                        placeLikelihood.getPlace().getName(),
                        placeLikelihood.getLikelihood()));
            }
        } else {
            Exception exception = task.getException();
            if (exception instanceof ApiException) {
                ApiException apiException = (ApiException) exception;
                Log.e(TAG, "Place not found: " + apiException.getStatusCode());
            }
        }
    });
} else {
    // A local method to request required permissions;
    // See https://developer.android.com/training/permissions/requesting
    getLocationPermission();
}

最佳答案

好的。我想通了。我为名称、ID 和地址创建了 3 个单独的请求。

private List<Place.Field> placeFieldsID,placeFieldsName,placeFieldsAddress;
private PlacesClient placesClient;
private FindCurrentPlaceRequest requestID,requestName,requestAddress;

placeFieldsID = Collections.singletonList(Place.Field.ID);
placeFieldsName = Collections.singletonList(Place.Field.NAME);    
placeFieldsAddress = Collections.singletonList(Place.Field.ADDRESS);

requestID = FindCurrentPlaceRequest.newInstance(placeFieldsID);
requestName = FindCurrentPlaceRequest.newInstance(placeFieldsName);
requestAddress = FindCurrentPlaceRequest.newInstance(placeFieldsAddress);

Task<FindCurrentPlaceResponse> placeResponseID = placesClient.findCurrentPlace(requestID);
            placeResponseID.addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    FindCurrentPlaceResponse response = task.getResult();
                    for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                        id = placeLikelihood.getPlace().getId();
                        Log.d(TAG, "onCreate: id: " + id);

                    }
                    Task<FindCurrentPlaceResponse> placeResponseName = placesClient.findCurrentPlace(requestName);
                    placeResponseName.addOnCompleteListener(new OnCompleteListener<FindCurrentPlaceResponse>() {
                        @Override
                        public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
                            FindCurrentPlaceResponse response = task.getResult();

                            for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                                name = placeLikelihood.getPlace().getName();
                                Log.d(TAG, "onCreate: name: "+name);


                            }
                            Task<FindCurrentPlaceResponse> placeResponseAddress = placesClient.findCurrentPlace(requestAddress);
                            placeResponseAddress.addOnCompleteListener(new OnCompleteListener<FindCurrentPlaceResponse>() {
                                @Override
                                public void onComplete(@NonNull Task<FindCurrentPlaceResponse> task) {
                                    FindCurrentPlaceResponse response = task.getResult();

                                    for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods()) {
                                        address = placeLikelihood.getPlace().getAddress();
                                        Log.d(TAG, "onCreate: address: "+address);

                                    }

                                }
                            });

                        }
                    });
                }
            });

关于Android Places SDK 从可能性中获取地点 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57957223/

相关文章:

java - Activity 未打开时广播接收器无法接收

Android:EditText 不允许带有 Next 软键的特殊字符

javascript - Google Places 覆盖自动完成关闭

java - Android Studio-Java.exe 以非零退出值 2 完成

android - 倒数计时器通知

javascript - 如何模拟点击谷歌地点自动完成结果?

Android应用程序实现谷歌自动完成2个输入的 Activity

jquery - 当文本输入与选项之一相同的值时,触发 Google 地点自动完成地点发生更改

swift - 在搜索栏中弹出表格 View ,swift 2

javascript - 从 cookie 重新加载 Google 地点数据