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?
4 Réponses :
Changer
playerModel.setDate (dataobj.getString ("date"));
à
playerModel.setDate (date);
Je sais. ce devrait être dataobj
. L'objet "date"
doit être assigné avec un tableau externe comme le montrent les données json.
utilisez la bibliothèque Gson Obtenez un objet JSON imbriqué avec GSON à l'aide de la mise à niveau a>
pour un objet imbriqué utiliser un objet en lui-même
pour plus d'informations, https://futurestud.io/tutorials/gson- mappage d'objets imbriqués
n'est pas le champ "date" statique dans VipPojo
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
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(); }