Столкновение с IllegalArgumentException: ключевая геометрия с помощью google-api-services-mapsengine
Я использую эту библиотеку "google-api-services-mapsengine" (версия 1.18.0-rc) и при попытке сделать выбор в Google Maps Engine, используя этот код:
com.google.api.services.mapsengine.MapsEngine.Tables.Features.List aRequest = myObj.getInstance().mapsEngine.tables().features().list(ASSET_ID_USER).setMaxResults((long) 1000)
.setSelect("num_dept")
.setWhere("mail='"+email+"'");
Я сталкиваюсь с этой проблемой:
java.lang.IllegalArgumentException: key geometry
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:871)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:374)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:347)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87)
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
2 ответа
Вот пример этой ошибки: https://code.google.com/p/google-api-java-client/issues/detail?id=867.
Между тем, лучший обходной путь - это включить "геометрию" в строку выбора или полностью ее опустить. Не изменяйте сгенерированную клиентскую библиотеку, так как вы не сможете выполнить обновление до будущих версий без изменения кода и можете обнаружить непредвиденные побочные эффекты - в этом случае вы вообще не сможете получить поле геометрии.
РЕДАКТИРОВАТЬ: Да, и Google нравится, когда вы "отмечаете" ошибки, чтобы показать, что вы также затронуты.
РЕДАКТИРОВАТЬ 2: Эта ошибка теперь исправлена, поэтому возьмите последнюю версию клиентской библиотеки Maps Engine (rev44 или выше) и посмотрите, как она работает.
После поиска того, что не так, я нашел две вещи: 1/ "Чтобы решить" это, вы должны выбрать поле геометрии, как этот код: com.google.api.services.mapsengine.MapsEngine.Tables.Features.List aRequest = SocleGme.getInstance(). MapsEngine.tables(). Features (). List(ASSET_ID_USER).setMaxResults((long) 1000) .setSelect("num_dept,geometry") .setWhere("mail='"+email+"'"));
2 / Через несколько часов я обнаружил, в чем проблема, и она пришла из этого класса: package com.google.api.services.mapsengine.model; /** * ........ * ........ * @author Google, Inc. */ @SuppressWarnings("javadoc") открытый финальный класс Feature extends com.google.api.client.json.GenericJson {
/**
* The geometry member of this Feature.
* The value may be {@code null}.
*/
@com.google.api.client.util.Key
private GeoJsonGeometry geometry;
Вы должны прокомментировать эту строку @com.google.api.client.util.Key, чтобы этот код работал:
com.google.api.services.mapsengine.MapsEngine.Tables.Features.List aRequest = myObj.getInstance().mapsEngine.tables().features().list(ASSET_ID_USER).setMaxResults((long) 1000)
.setSelect("num_dept")
.setWhere("mail='"+email+"'");
Было бы неплохо исправить это прямо в библиотеке.
С уважением, Себастьян