Android GSON возможная ошибка в разборе JSON? - PullRequest
0 голосов
/ 25 марта 2019

Мой вопрос очень прост.Пожалуйста, посмотрите на этот JSON-источник: JSON API LINK .

Вот код для анализа QualifyingResults, чтобы получить эти поля: position, Q1, Q2 и Q3.

private static void parseJsonData(String json) {
        JsonElement root = new JsonParser().parse(json);
        JsonObject rootObj = root.getAsJsonObject();

        JsonArray schedulesPath = rootObj.getAsJsonObject("MRData")
                .getAsJsonObject("RaceTable")
                .getAsJsonArray("Races");

        if (schedulesPath.size() > 0) {
            int pos = 1;

            JsonArray qualifyingsList = schedulesPath.get(0)
                    .getAsJsonObject()
                    .getAsJsonArray("QualifyingResults");

            for (JsonElement element : qualifyingsList) {
                JsonObject qualiTimes = element.getAsJsonObject();

                String driverName = qualiTimes.getAsJsonObject("Driver").get("familyName").getAsString();
                String Q1 = qualiTimes.get("Q1").getAsString();
                String Q2 = qualiTimes.get("Q2").getAsString();
                String Q3 = qualiTimes.get("Q3").getAsString();

                Log.d("quali_results", Q1 + " " + Q2 + " " + Q3);
            }
        }

    }

Почему я получаю эту ошибку?

java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String com.google.gson.JsonElement.getAsString ()' внулевая ссылка на объект

Как вы можете видеть здесь:

obl

position, Q1, Q2 и Q3 являются атрибутамиобъект 0. Почему тогда это вызывает исключение NullPointerException

String Q1 = qualiTimes.get("Q1").getAsString();
String Q2 = qualiTimes.get("Q2").getAsString();
String Q3 = qualiTimes.get("Q3").getAsString();

, а это не так?

String Q1 = qualiTimes.get("position").getAsString();
String Q2 = qualiTimes.get("position").getAsString();
String Q3 = qualiTimes.get("position").getAsString();

Может ли это быть проблемой с GSON?

1 Ответ

1 голос
/ 25 марта 2019

get метод не является безопасным при цепном вызове. См. Документацию, @return:

член, соответствующий имени. Нет, если такого члена не существует.

Итак, вам нужно проверить, не является ли это null:

JsonElement q3Element = qualiTimes.get("Q3");
String Q3 = null;
if (q3Element != null) {
    Q3 = q3Element.getAsString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...