我有一个包含3个对象的数组的JSON。因此,当我检索事件JSON()时,我只是将属性设置为Event对象。当我从另一个活动调用plotEventOnMap()时,我希望在地图上看到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中的最后一行记录而不是循环并绘制每一行。任何指南?
提前致谢。
答案 0 :(得分:0)
在设置了所有.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
(或类似)所有这些,您需要确保它们是所有不同的实例。
我建议像这样重铸:
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
的列表,您可以将其发送到您的绘图方法或其他任何合适的位置。
答案 1 :(得分:0)
eventModel.setEventName(eventName);
返回添加到其中的最新元素,因为在每次重复时都要重置它。
您可以在每次迭代后将对象添加到列表中,以便列表具有元素。在for循环中声明你的EventModel
对象以获得每次迭代的实例。
for (int i = 0; i < length; i++) {
JSONObject attribute = jsonArray.getJSONObject(i);
String eventID = attribute.getString("eventID");
String eventName = attribute.getString("eventName");
EventModel eventModel=new eventModel();
eventModel.setEventID(eventID);
eventModel.setEventName(eventName);
list.add(eventModel);
}