Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GooglePlacesAPI:用Java刷新地点ID_Java_Android_Google Maps_Google Maps Api 2 - Fatal编程技术网

GooglePlacesAPI:用Java刷新地点ID

GooglePlacesAPI:用Java刷新地点ID,java,android,google-maps,google-maps-api-2,Java,Android,Google Maps,Google Maps Api 2,谷歌关于PlaceID的变化和建议 由于谷歌地图数据库的大规模更新,地点ID可能会发生变化。在这种情况下,一个地点可能会收到一个新的地点ID,而旧ID会返回一个NOT_FOUND响应 通过发出Place Details请求,仅在fields参数中指定ID字段,可以免费刷新Place ID 不幸的是,他们的网站上没有Java/Kotlin的示例代码,只有指向他们的 String placeID=“某地ID”; List placeFields=Arrays.asList( Place.Field.

谷歌关于PlaceID的变化和建议

由于谷歌地图数据库的大规模更新,地点ID可能会发生变化。在这种情况下,一个地点可能会收到一个新的地点ID,而旧ID会返回一个NOT_FOUND响应

通过发出Place Details请求,仅在fields参数中指定ID字段,可以免费刷新Place ID

不幸的是,他们的网站上没有Java/Kotlin的示例代码,只有指向他们的

String placeID=“某地ID”;
List placeFields=Arrays.asList(
Place.Field.ID,
);
//构造一个请求对象,传递位置ID和字段数组。
FetchPlaceRequest=FetchPlaceRequest.builder(placeID,placeFields.build();
placesClient.fetchPlace(请求).addOnSuccessListener(响应)->{
Place=response.getPlace();
如果(!placeID.equals(place.getId())){
//更新旧的placeID
}
}).addOnFailureListener((异常)->{
if(ApiException的异常实例){
//位置移除。
}
});

这是用Java更新PlaceID的最好方法吗?

我已经测试了我的数据库,发现了一个更新的例子。下面的代码包含更新的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);
        }
    });
}

而且
状态代码9102
似乎是用于找不到的地方。

就我所见,您的代码看起来不错。只要您只在请求的字段中添加地点ID,就应该只触发地点详细信息-ID刷新SKU。这个代码对你有用吗?我建议您使用一个无效的位置ID进行测试。请分享您这边的测试结果。@evan我分享了我自己的结果
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