1
votes

une boucle dans un tableau json imbriqué ajoute une valeur précédemment affectée au modèle de données

s'il vous plaît regarder dans ce json:

VipPojo playerModel;
try {
    JSONArray dataArray = obj.getJSONArray("data");
    for (int i = 0; i < dataArray.length(); i++) {
        JSONObject dataobj = dataArray.getJSONObject(i);
        JSONArray dataArrays1 = dataobj.getJSONArray("time");
        String date = dataobj.getString("date");
        System.out.println("date: " + date); // here I get correct data (all 3 items);
        for (int j = 0; j < dataArrays1.length(); j++) {
            playerModel = new VipPojo();
            JSONObject dataobj1 = dataArrays1.getJSONObject(j);
            playerModel.setDate(date); // this is adding same previous assigned "date" until loop ends(I get 5 data with duplicate values)
            playerModel.setTimes(dataobj1.getString("times"));
            playerModel.setNotice(dataobj1.getString("notice"));
            playerModel.setCategory(dataobj1.getString("category"));
            dataModelArrayList.add(playerModel);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}

Je polule ces données json dans mon ArrayList comme ceci:

{
  "data": [
    {
      "date": "Thursday 1, August, 2019",
      "time": [
        {
          "times": "1:13PM to 1:13PM",
          "notice": "testing",
          "category": "Meeting"
        },
        {
          "times": "12:00PM to 1:00PM",
          "notice": "Meeting",
          "category": "Meeting"
        }
      ]
    },
    {
      "date": "Friday 2, August, 2019",
      "time": [
        {
          "times": "3:00PM to 3:30PM",
          "notice": "Appointment",
          "category": "Meeting"
        },
        {
          "times": "12:00PM to 12:30PM",
          "notice": "Appointment",
          "category": "Meeting"
        }
      ]
    },
    {
      "date": "Monday 5, August, 2019",
      "time": [
        {
          "times": "11:00AM to 11:30AM",
          "notice": "Obj",
          "category": "Meeting"
        }
      ]
    }
  ]
}

comme je mentionné dans les commentaires du code ci-dessus, l'objet "date" ajoute une valeur précédemment affectée au modèle de données car setDate () est utilisé dans la boucle interne, ce que je ne veux pas cette.

Pouvez-vous m'aider avec ceci s'il vous plaît?


0 commentaires

4 Réponses :


0
votes

Changer playerModel.setDate (dataobj.getString ("date")); à playerModel.setDate (date);


1 commentaires

Je sais. ce devrait être dataobj . L'objet "date" doit être assigné avec un tableau externe comme le montrent les données json.




0
votes

n'est pas le champ "date" statique dans VipPojo


3 commentaires

quelle est la différence, l'objet modèle s'initialise de toute façon dans cette boucle. pourtant j'ai essayé cela et cela n'a pas fonctionné.


J'imprime dataModelArrayList: for (VipPojo vp: dataModelArrayList) {Log.d ("gggggg", vp.date); }


résultat: jeudi 1 août 2019 jeudi 1 août 2019 vendredi 2 août 2019 vendredi 2 août 2019 lundi 5 août 2019



0
votes

vous pouvez essayer comme ceci

VipPojo playerModel;
try {
    JSONArray dataArray = obj.getJSONArray("data");
    for (int i = 0; i < dataArray.length(); i++) {
    playerModel = new VipPojo();
        JSONObject dataobj = dataArray.getJSONObject(i);
        JSONArray dataArrays1 = dataobj.getJSONArray("time");
        String date = dataobj.getString("date");
        System.out.println("date: " + date); // here I get correct data (all 3 items);
        playerModel.setDate(date);
        for (int j = 0; j < dataArrays1.length(); j++) {

            JSONObject dataobj1 = dataArrays1.getJSONObject(j);
             // this is adding same previous assigned "date" until loop ends(I get 5 data with duplicate values)
            playerModel.setTimes(dataobj1.getString("times"));
            playerModel.setNotice(dataobj1.getString("notice"));
            playerModel.setCategory(dataobj1.getString("category"));
            dataModelArrayList.add(playerModel);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}


0 commentaires