简体   繁体   English

Google Places API:使用 Java 刷新地点 ID

[英]Google Places API : refresh Place IDs with Java

Google warns us about PlaceID changes and suggests; Google 会就 PlaceID 更改向我们发出警告并提出建议;

Place IDs may change due to large-scale updates on the Google Maps database.由于 Google 地图数据库的大规模更新,地点 ID 可能会发生变化。 In such cases, a place may receive a new place ID, and the old ID returns a NOT_FOUND response.在这种情况下,一个地点可能会收到一个新的地点 ID,而旧的 ID 会返回一个 NOT_FOUND 响应。

You can refresh Place IDs free of charge, by making a Place Details request, specifying only the ID field in the fields parameter.您可以免费刷新场所 ID,方法是发出场所详细信息请求,仅在 fields 参数中指定 ID 字段。

Unfortunately, there is no sample code for Java/Kotlin on their website except a link to their web services不幸的是,除了指向其Web 服务的链接外,他们的网站上没有 Java/Kotlin 的示例代码

String placeID ="Some place ID";

    List<Place.Field> placeFields = Arrays.asList(
            Place.Field.ID,
    );

    // Construct a request object, passing the place ID and fields array.
    FetchPlaceRequest request = FetchPlaceRequest.builder(placeID, placeFields).build();
    placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
        Place place = response.getPlace();

        if (!placeID.equals(place.getId())) {
            //update your old placeID
        }
   }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            //Place removed.
        }
   });

Is this a porper way to update a placeIDs with Java?这是一种用 Java 更新 placeID 的好方法吗?

I've tested my databases and found a case where the update occurs.我已经测试了我的数据库并发现了发生更新的情况。 The below code contains both a renewed placeID, removed placeID, and still valid palceID so that one can test.下面的代码包含更新的 placeID、删除的 placeID 和仍然有效的 palceID,以便可以进行测试。

ArrayList<String> placeIDsList = new ArrayList<>();
placeIDsList.add("ChIJTaKjynxesBQREvi1CU5QUFg");
placeIDsList.add("EjhDdW1odXJpeWV0IE1haGFsbGVzaSwgVXp1biBTay4sIEV6aW5lL8OHYW5ha2thbGUsIFR1cmtleSIuKiwKFAoSCakQkmN8XrAUEVkLpNK_F4IJEhQKEgmFzKyYe16wFBGSjU7F2ooIIg");
placeIDsList.add("hIJy9YVxdxpsBQRq0-xUVJdZQ8");

// Specify the fields to return (in this example all fields are returned).
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID);

for (String plc : placeIDsList ) {
    // Construct a request object, passing the place ID and fields array.
    FetchPlaceRequest request = FetchPlaceRequest.builder(plc, placeFields).build();

    Log.e(TAG,"request for place with ID = " + plc);

    placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
        Place place = response.getPlace();


        if (!plc.equals(place.getId())) {
            Log.e(TAG,"placeID renewed");
            Log.e(TAG,"placeID old = " + plc);
            Log.e(TAG,"placeID new = " + place.getId());

        } else {
            Log.e(TAG, "Place found: " + place.getId());
        }


    }).addOnFailureListener((exception) -> {
        if (exception instanceof ApiException) {
            ApiException apiException = (ApiException) exception;
            int statusCode = apiException.getStatusCode();
            // Handle error with given status code.
            Log.e(TAG, "Place with ID "+plc+" not found");
            Log.e(TAG, "Exception message is :" + exception.getMessage());
            Log.e(TAG, "Status code = " + statusCode);
        }
    });
}

The output is输出是

E/MapsActivity: request for place with ID = ChIJTaKjynxesBQREvi1CU5QUFg
E/MapsActivity: request for place with ID = jhDdW1odXJpeWV0IE1haGFsbGVzaSwgVXp1biBTay4sIEV6aW5lL8OHYW5ha2thbGUsIFR1cmtleSIuKiwKFAoSCakQkmN8XrAUEVkLpNK_F4IJEhQKEgmFzKyYe16wFBGSjU7F2ooIIg
E/MapsActivity: request for place with ID = hIJy9YVxdxpsBQRq0-xUVJdZQ8
E/MapsActivity: placeID renewed
E/MapsActivity: placeID old = EjhDdW1odXJpeWV0IE1haGFsbGVzaSwgVXp1biBTay4sIEV6aW5lL8OHYW5ha2thbGUsIFR1cmtleSIuKiwKFAoSCakQkmN8XrAUEVkLpNK_F4IJEhQKEgmFzKyYe16wFBGSjU7F2ooIIg
E/MapsActivity: placeID new = Ei5DdW1odXJpeWV0LCBVenVuIFNrLiwgRXppbmUvw4dhbmFra2FsZSwgVHVya2V5Ii4qLAoUChIJqRCSY3xesBQRWQuk0r8XggkSFAoSCYXMrJh7XrAUEZKNTsXaiggi
E/MapsActivity: Place with ID hIJy9YVxdxpsBQRq0-xUVJdZQ8 not found
E/MapsActivity: Exception message is :9012: INVALID_REQUEST
E/MapsActivity: Status code = 9012
E/MapsActivity: Place found: ChIJTaKjynxesBQREvi1CU5QUFg

And it seems that the status code 9102 is for place not found.似乎status code 9102是针对未找到的地方。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM