Data from API parsing in for cycle with bad result





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















I parse data from API (https://statsapi.web.nhl.com/api/v1/standings) in for cycle. In debug mode, I see, that data are correct from API, but when I write first record to "tabulkaTimov", and for cycle have j=1 (j=2,j=3, ... etc), my first record is replace by next team.



Screenshot of my app:
https://ctrlv.cz/shots/2019/01/03/bbEf.png



It is table of NHL league.



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;
}









share|improve this question





























    1















    I parse data from API (https://statsapi.web.nhl.com/api/v1/standings) in for cycle. In debug mode, I see, that data are correct from API, but when I write first record to "tabulkaTimov", and for cycle have j=1 (j=2,j=3, ... etc), my first record is replace by next team.



    Screenshot of my app:
    https://ctrlv.cz/shots/2019/01/03/bbEf.png



    It is table of NHL league.



    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;
    }









    share|improve this question

























      1












      1








      1








      I parse data from API (https://statsapi.web.nhl.com/api/v1/standings) in for cycle. In debug mode, I see, that data are correct from API, but when I write first record to "tabulkaTimov", and for cycle have j=1 (j=2,j=3, ... etc), my first record is replace by next team.



      Screenshot of my app:
      https://ctrlv.cz/shots/2019/01/03/bbEf.png



      It is table of NHL league.



      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;
      }









      share|improve this question














      I parse data from API (https://statsapi.web.nhl.com/api/v1/standings) in for cycle. In debug mode, I see, that data are correct from API, but when I write first record to "tabulkaTimov", and for cycle have j=1 (j=2,j=3, ... etc), my first record is replace by next team.



      Screenshot of my app:
      https://ctrlv.cz/shots/2019/01/03/bbEf.png



      It is table of NHL league.



      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;
      }






      android api android-studio






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 3 at 14:23









      LukasLukas

      387




      387
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Looks like you are creating a new tabulka object outside of your for loop and then add it multiple times in the same arraylist.
          This will add it once (reference) and just update its content.



          Here is what you can do



          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;
          }


          This way you will add a different/new object each time you go over the loop into your ArrayList; - instead of adding the same reference of the same object every time with its data updated.






          share|improve this answer


























          • Beautiful ! All work, greate :-) Thanks !

            – Lukas
            Jan 3 at 15:19












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54024195%2fdata-from-api-parsing-in-for-cycle-with-bad-result%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          Looks like you are creating a new tabulka object outside of your for loop and then add it multiple times in the same arraylist.
          This will add it once (reference) and just update its content.



          Here is what you can do



          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;
          }


          This way you will add a different/new object each time you go over the loop into your ArrayList; - instead of adding the same reference of the same object every time with its data updated.






          share|improve this answer


























          • Beautiful ! All work, greate :-) Thanks !

            – Lukas
            Jan 3 at 15:19
















          0














          Looks like you are creating a new tabulka object outside of your for loop and then add it multiple times in the same arraylist.
          This will add it once (reference) and just update its content.



          Here is what you can do



          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;
          }


          This way you will add a different/new object each time you go over the loop into your ArrayList; - instead of adding the same reference of the same object every time with its data updated.






          share|improve this answer


























          • Beautiful ! All work, greate :-) Thanks !

            – Lukas
            Jan 3 at 15:19














          0












          0








          0







          Looks like you are creating a new tabulka object outside of your for loop and then add it multiple times in the same arraylist.
          This will add it once (reference) and just update its content.



          Here is what you can do



          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;
          }


          This way you will add a different/new object each time you go over the loop into your ArrayList; - instead of adding the same reference of the same object every time with its data updated.






          share|improve this answer















          Looks like you are creating a new tabulka object outside of your for loop and then add it multiple times in the same arraylist.
          This will add it once (reference) and just update its content.



          Here is what you can do



          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;
          }


          This way you will add a different/new object each time you go over the loop into your ArrayList; - instead of adding the same reference of the same object every time with its data updated.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 3 at 15:37

























          answered Jan 3 at 14:28









          Quentin KleinQuentin Klein

          748622




          748622













          • Beautiful ! All work, greate :-) Thanks !

            – Lukas
            Jan 3 at 15:19



















          • Beautiful ! All work, greate :-) Thanks !

            – Lukas
            Jan 3 at 15:19

















          Beautiful ! All work, greate :-) Thanks !

          – Lukas
          Jan 3 at 15:19





          Beautiful ! All work, greate :-) Thanks !

          – Lukas
          Jan 3 at 15:19




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54024195%2fdata-from-api-parsing-in-for-cycle-with-bad-result%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          MongoDB - Not Authorized To Execute Command

          How to fix TextFormField cause rebuild widget in Flutter

          in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith