Ошибка синтаксического анализа JSON: org.json.JSONException: индекс 6 вне диапазона - PullRequest
0 голосов
/ 10 января 2019

Я начал тему о разборе вложенного массива: Как вернуть содержимое следующего вложенного массива JSON в Android?

Я загружаю список станций метро в строке из следующего URL: https://api.tfl.gov.uk/Line/victoria/Route/Sequence/inbound?serviceTypes=Regular,Night

Станции заключены во вложенный массив. Мне нужно извлечь "id" и "name" из массива "stopPoint", вложенного в массив "stopPointSeptions". Я использую AsyncTask и храню список в адаптере RecyclerView. Я не использую HashMap или GSON. Отображаются только от одного до четырех элементов.

Приложение не падает, но указанная выше ошибка индекса находится в этой строке (код ниже): JSONObject innerElem = stopPointArrayList.getJSONObject (i);

Кроме того, предупреждение для оператора "for" выше означает, что это "оператор имеет пустое тело". Наткнулся на эту ветку:

Ошибка org.json.JSONException: индекс 2 вне диапазона

Я изменил «i» на «j» во вложенном операторе «for», но «j» не распознается.

Заранее спасибо.

Модератору. Это нормально, если я опубликую ссылку на другую ветку, а не скопирую и вставлю весь код здесь?

JSONUtils класс:

      public static ArrayList<Stations> extractFeatureFromStationJson(String stationJSON)
    {
        // If the JSON string is empty or null, then return early.
        if (TextUtils.isEmpty(stationJSON))
        {
            return null;
        }
       ArrayList<Stations> stations = new ArrayList<>();

        try
        {
            // Create a JSONObject from the JSON response string
            JSONObject baseJsonResponse = new JSONObject(stationJSON);
            JSONArray stopPointSequenceArrayList = baseJsonResponse.getJSONArray("stopPointSequences");
            if (stopPointSequenceArrayList != null)
            {
                for (int i = 0; i < stopPointSequenceArrayList.length(); i++)
                {
                    JSONObject elem = stopPointSequenceArrayList.getJSONObject(i);
                    if (elem != null)
                    {
                        JSONArray stopPointArrayList = elem.getJSONArray("stopPoint");
                        if (stopPointArrayList != null) {
                            for (int j = 0; j < stopPointArrayList.length(); j++) ;
                            {
                                JSONObject innerElem = stopPointArrayList.getJSONObject(j);
                                if (innerElem != null) {
                                    String idStation = "";
                                    if (innerElem.has("id")) {
                                        idStation = innerElem.optString(KEY_STATION_ID);
                                    }
                                    String nameStation = "";
                                    if (innerElem.has("name")) {
                                        nameStation = innerElem.optString(KEY_STATION_NAME);
                                    }
                                    Stations station = new Stations(idStation, nameStation);
                                    stations.add(station);
                                }
                            }
                        }
                    }
                }
            }

        } catch (JSONException e)
        {
            // If an error is thrown when executing any of the above statements in the "try" block,
            // catch the exception here, so the app doesn't crash. Print a log message
            // with the message from the exception.
            Log.e("QueryUtils", "Problem parsing stations JSON results", e);
        }
        // Return the list of stations
        return stations;

    }
}

1 Ответ

0 голосов
/ 10 января 2019

вы можете использовать любого из клиентов, таких как Volley или Retrofit2 для получения данных с API

как только вы получите данные, отобразите их, используя библиотеку Gson, и затем вы сможете использовать данные в соответствии с вашими требованиями

у вас будут прослушиватели ответа onsuccess и onfailure прослушиватели

...