java .lang.UnsupportedOperationException: JsonObject - Не знаю, почему - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующий код:


    JsonElement deviceConfig = null;

    JsonObject status = getRestAPI().Connectivity().getDeviceStatus(device);

    deviceConfig = status.get("deviceConfig");

    if (deviceConfig == null || deviceConfig.isJsonNull()) {
        deviceConfig = status.get("mConfig");
    }

    if (deviceConfig != null && !deviceConfig.isJsonNull()) {
        if (!deviceConfig.getAsString().isEmpty()) {
            break;
        }
    }

По некоторым причинам я получаю следующую ошибку:

java .lang.UnsupportedOperationException: JsonObject at com.google .gson.JsonElement.getAsString (JsonElement. java: 191)

В этой строке:

if (!deviceConfig.getAsString().isEmpty()) {

Любая идея, почему я получаю это исключение, хотя я проверял, что JSON не равно нулю?

1 Ответ

0 голосов
/ 12 марта 2020

JsonElement Исходный код: https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java

Класс JsonElement является абстрактным классом, он предназначен для использования через подклассы, которые предоставляют дополнительные реализации, для которых абстрактный класс не является достаточно конкретный.

Метод getAsString существует, да, но реализован так:

  /**
   * convenience method to get this element as a string value.
   *
   * @return get this element as a string value.
   * @throws ClassCastException if the element is of not a {@link JsonPrimitive} and is not a valid
   * string value.
   * @throws IllegalStateException if the element is of the type {@link JsonArray} but contains
   * more than a single element.
   */
  public String getAsString() {
    throw new UnsupportedOperationException(getClass().getSimpleName());
  }

Это означает, что вы должны предоставить реализацию в своем подклассе.

Итак, чтобы получить желаемый результат, вам нужно привести переменную к вашему подклассу, прежде чем вызывать для нее getAsString ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...