2014-11-05 3 views
1

배열이 3 개인 JSON이 있습니다. 그래서 RetrieveJSON()을 검색 할 때 단순히 속성을 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

답변

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() 내에서 이벤트 배열을 반복합니다. –

+0

@IWasSoLost 예, 현명한 소리입니다. 답변을 얻으려면 업데이트를 참조하십시오. –

+0

감사합니다! 지금 일하고있어 –

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

고마워! 그것은 지금 일하고있다!! –

관련 문제