Java 循环数组到绘图标记

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

我有一个包含3个对象的JSON数组。因此,当我retrieveEventJSON()时,我只是将属性设置为事件对象。当我从另一个活动调用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));
}
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循环中声明your
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);
            }
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);
            }