2014-11-05 39 views
1

我有一個3對象數組的JSON。所以,當我retrieveEventJSON()時,我只是將屬性設置爲一個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

如何定義eventModel?我認爲這個對象只有一個實例,所以來自json數組的最後一個對象獲勝,這就是爲什麼它只顯示最後一行。 – BlueLettuce16 2014-11-05 09:22:36

回答

1

您需要在設置所有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你現在構建的東西。這可能會繪製它,或者將它添加到某個集合中,或者其他任何東西。但目前,你要直接回到循環中,然後在下一次迭代中覆蓋你所做的所有好的工作。你只是最後一次結束的原因是,當你完成最後一次迭代時,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秒的列表,你可以發送給你的繪圖方法或任何是適當。

+0

由於retrieveEventJSON將在後臺執行,但不會在地圖上繪製標記。所以我在想如果我應該聲明另一個Event數組來存儲Event對象。然後在plot()中,然後循環Event數組 – 2014-11-05 09:25:02

+0

@IWasSoLost是的,這聽起來很合理。查看更新以回答。 – 2014-11-05 09:30:17

+0

謝謝!它正在工作 – 2014-11-05 09:32:03

1

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); 
      } 
+0

非常感謝!它現在正在工作! – 2014-11-05 09:33:14