Java 循环数组到绘图标记
我有一个包含3个对象的JSON数组。因此,当我retrieveEventJSON()时,我只是将属性设置为事件对象。当我从另一个活动调用plotEventOnMap()时,我希望在地图上看到3个标记Java 循环数组到绘图标记,java,arrays,json,loops,map,Java,Arrays,Json,Loops,Map,我有一个包含3个对象的JSON数组。因此,当我retrieveEventJSON()时,我只是将属性设置为事件对象。当我从另一个活动调用plotEventOnMap()时,我希望在地图上看到3个标记 public void retrieveEventJSON() throws JSONException { String page; JSONArray jsonArray; try { // Code to retrieve data from serv
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));
}
public void retrieveEventJSON()抛出JSONException{
字符串页;
JSONArray JSONArray;
试一试{
//从servlet检索数据的代码
试一试{
JSONObject JSONObject=新JSONObject(第页);
jsonArray=jsonObject.getJSONArray(“事件”);
int length=jsonArray.length();
for(int i=0;i
但是有了这些代码,它只显示JSON中的最后一行记录,而不是循环并绘制每个记录。有导游吗
提前感谢。在设置所有
EventModel
属性后,您需要调用.plotEventOnMap()
,或者从循环内部对您构建的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
的代码,所以我不知道构造函数是什么样子的。)如果要保留所有这些的列表(或类似列表),需要确保它们都是不同的实例
我建议重铸如下:
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
}
List events=new ArrayList()//新的
for(int i=0;i
循环完成后,您将有一个EventModel
s列表,可以发送到绘图方法或任何适当的方法。EventModel.setEventName(eventName)代码>返回添加到其中的最新元素,因为在每次迭代中都会重置它
您可以在每次迭代后将对象添加到列表中,以便列表中包含元素。在for循环中声明yourEventModel
对象,使其具有每次迭代的实例
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);
}
for(int i=0;i
如何定义eventModel?我认为这个对象只有一个实例,所以json数组中的最后一个对象获胜,这就是为什么它只显示最后一行。因为retrieveEventJSON将在后台执行,而不是在地图上的绘图标记。所以我在想是否应该声明另一个事件数组来存储事件对象。然后在plot()中,我循环事件数组
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);
}