Данные из API разбираются за цикл с плохим результатом - PullRequest
0 голосов
/ 03 января 2019

Я анализирую данные из API (https://statsapi.web.nhl.com/api/v1/standings) в течение цикла. В режиме отладки я вижу, что данные верны из API, но когда я записываю первую запись в "tabulkaTimov", а для цикла имеем j =1 (j = 2, j = 3, ... и т. Д.), Моя первая запись заменяется следующей командой.

Снимок экрана моего приложения: https://ctrlv.cz/shots/2019/01/03/bbEf.png

Это таблица НХЛлига.

public static List<TableTeamsModel> convertJsonToTableTeams(JsonObject data){
    List<TableTeamsModel> tabulkaTimov = new ArrayList<>();
    JsonArray pocetDivizii = data.get("records").getAsJsonArray();

    for(int i=0;i<pocetDivizii.size();i++){

       TableTeamsModel tabulka = new TableTeamsModel();

       JsonObject division = pocetDivizii.get(i).getAsJsonObject();
       tabulka.setDivisionName(division.get("division").getAsJsonObject().get("name").getAsString());

       JsonArray teams = division.get("teamRecords").getAsJsonArray();

        for(int j=0;j<teams.size();j++) {

            JsonObject teamRecords = teams.get(j).getAsJsonObject();
            tabulka.setTeamName(teamRecords.get("team").getAsJsonObject().get("name").getAsString());

            tabulka.setGoalsGot(teamRecords.get("goalsAgainst").getAsInt());
            tabulka.setGoalsScored(teamRecords.get("goalsScored").getAsInt());
            tabulka.setPoints(teamRecords.get("points").getAsInt());
            tabulka.setGamesPlayed(teamRecords.get("gamesPlayed").getAsInt());

            tabulkaTimov.add(tabulka);
        }
    }
    return tabulkaTimov;
}

1 Ответ

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

Похоже, вы создаете новый объект tabulka вне вашего цикла for, а затем добавляете его несколько раз в одном и том же массиве.Это добавит его один раз (ссылка) и просто обновит его содержимое.

Вот что вы можете сделать

public static List<TableTeamsModel> convertJsonToTableTeams(JsonObject data){
    List<TableTeamsModel> tabulkaTimov = new ArrayList<>();
    JsonArray pocetDivizii = data.get("records").getAsJsonArray();

    for(int i=0;i<pocetDivizii.size();i++){

        // Remove the creation of the tabulka object from here

        JsonObject division = pocetDivizii.get(i).getAsJsonObject()
        JsonArray teams = division.get("teamRecords").getAsJsonArray();

        for(int j=0;j<teams.size();j++) {

            JsonObject teamRecords = teams.get(j).getAsJsonObject();

            // And then put the object creation here.
            // as we did't have it above, the division name has to be set here too.

            TableTeamsModel tabulka = new TableTeamsModel();
            tabulka.setDivisionName(division.get("name").getAsString());
            tabulka.setTeamName(teamRecords.get("team").getAsJsonObject().get("name").getAsString());
            tabulka.setGoalsGot(teamRecords.get("goalsAgainst").getAsInt());
            tabulka.setGoalsScored(teamRecords.get("goalsScored").getAsInt());
            tabulka.setPoints(teamRecords.get("points").getAsInt());
            tabulka.setGamesPlayed(teamRecords.get("gamesPlayed").getAsInt());

            tabulkaTimov.add(tabulka);
        }
    }
    return tabulkaTimov;
}

Таким образом, вы добавите другой / новый объект каждый раз, когда вы переходите цикл в ArrayList;- вместо добавления одной и той же ссылки на один и тот же объект каждый раз с обновленными данными.

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