Я начал тему о разборе вложенного массива:
Как вернуть содержимое следующего вложенного массива 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;
}
}