gpt4 book ai didi

java - 循环数组来绘制标记

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:13 24 4
gpt4 key购买 nike

我有一个包含 3 个对象的数组的 JSON。因此,当我检索EventJSON()时,我只是将属性设置为事件对象。当我从另一个 Activity 调用plotEventOnMap()时,我希望在 map 上看到3个标记​​。

public void retrieveEventJSON() throws JSONException {
String page;
JSONArray jsonArray;

try {
// Code to retrieve data from servlet
try {
JSONObject jsonObject = new JSONObject(page);
jsonArray = jsonObject.getJSONArray("Events");
int length = jsonArray.length();
for (int i = 0; i < length; i++) {
JSONObject attribute = jsonArray.getJSONObject(i);
String eventID = attribute.getString("eventID");
String eventName = attribute.getString("eventName");
String eventDesc = attribute.getString("eventDesc");
String eventDate = attribute.getString("eventDate");

eventModel.setEventID(eventID);
eventModel.setEventName(eventName);
eventModel.setEventDesc(eventDesc);
eventModel.setEventDate(eventDate);

}
} catch (JSONException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}

public void plotEventOnMap(Context context) {
graphicIcon = new PictureMarkerSymbol(res);
Point p = new Point(Double.parseDouble(eventModel.getEventX()),
Double.parseDouble(eventModel.getEventY()));
Symbol symbol = graphicIcon;

HashMap<String, Object> attrMap = new HashMap<String, Object>();
attrMap.put("eventName", eventModel.getEventName());
attrMap.put("eventBy", eventModel.getEventBy());

ENeighbourhoodActivity.graphicsLayer.addGraphic(new Graphic(p, symbol,
attrMap));
}

但是使用这些代码,它只显示 JSON 中的最后一行记录,而不是循环并绘制每个记录。有什么指南吗?

提前致谢。

最佳答案

在设置所有 后,您需要从循环内部调用 .plotEventOnMap() 或以其他方式对您构建的 EventModel 执行某些操作EventModel 属性。目前,您只是覆盖 EventModel 而不使用它。

for (int i = 0; i < length; i++) {
JSONObject attribute = jsonArray.getJSONObject(i);
String eventID = attribute.getString("eventID");
String eventName = attribute.getString("eventName");
String eventDesc = attribute.getString("eventDesc");
String eventDate = attribute.getString("eventDate");

eventModel.setEventID(eventID);
eventModel.setEventName(eventName);
eventModel.setEventDesc(eventDesc);
eventModel.setEventDate(eventDate);
}

就在循环结束之前,您需要对现在构建的 EventModel 执行一些操作。这可能是绘制它,或者将它添加到某个集合中,或者其他什么。但目前,您将直接返回循环,然后在下一次迭代中覆盖您所做的所有出色工作。您只以最后一个结尾的原因是,当您完成最后一次迭代时, eventModel 中剩下的内容就是您上次执行循环时编写的内容。

其实我想你也想要

EventModel eventModel = new EventModel();

作为循环中的第一件事。 (我不知道这是否完全正确,因为我们还没有看到 EventModel 的代码,所以我不知道构造函数是什么样的。)如果你想保留一个 列出所有这些的(或类似内容),您需要确保它们都是不同的实例。

我建议像这样重铸:

List<EventModel> events = new ArrayList<EventModel>();     //NEW
for (int i = 0; i < length; i++) {
EventModel eventModel = new EventModel(); //NEW
JSONObject attribute = jsonArray.getJSONObject(i);
String eventID = attribute.getString("eventID");
String eventName = attribute.getString("eventName");
String eventDesc = attribute.getString("eventDesc");
String eventDate = attribute.getString("eventDate");

eventModel.setEventID(eventID);
eventModel.setEventName(eventName);
eventModel.setEventDesc(eventDesc);
eventModel.setEventDate(eventDate);
events.add(eventModel); //NEW
}

循环完成后,您将获得一个 EventModel 列表,您可以将其发送到绘图方法或任何适当的方法。

关于java - 循环数组来绘制标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26753386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com