谷歌地点API:使用Java刷新地点ID

3

谷歌 提醒我们 关于PlaceID的更改,并建议;

由于Google Maps数据库的大规模更新,Place IDs可能会发生变化。在这种情况下,一个地点可能会获得一个新的Place ID,而旧的ID则会返回NOT_FOUND响应。

您可以通过仅在fields参数中指定ID字段来免费刷新Place IDs ,进行Place Details请求。

不幸的是,在他们的网站上没有Java / Kotlin的示例代码,除了一个指向他们的Web服务

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.
        }
   });

这是使用Java更新placeIDs的正确方法吗?

1
就我所见,你的代码看起来很好。只要在请求的字段中添加地点ID,你应该只会触发“地点详情 - ID刷新SKU”操作。这段代码对你有效吗?我建议你使用无效的地点ID进行测试。请分享你的测试结果。 - evan
@evan 我分享了我的结果 - Yunus Karakaya
1个回答

2

我已经测试了我的数据库,并发现了一个更新发生的情况。下面的代码包含了一个更新后的placeID、删除的placeID和仍然有效的placeID,以便进行测试。

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);
        }
    });
}

输出结果为:

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

看起来 状态码 9102 是指未找到位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接