Столкновение с 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+"'");

Было бы неплохо исправить это прямо в библиотеке.

С уважением, Себастьян

Другие вопросы по тегам