2011-01-07 7 views
1

나는 자원에서 xml 파일을 읽고 있는데, 그 파일에는 여행사 위치와 주소 목록이 들어있어 arraylist에서 구문 분석 한 후이 목록을지도와 함께 사용하려고합니다. 그래서 agency.add (에이전시)를 사용할 때마다 배열에 추가되지만 이전 값을 새 값으로 변경합니다. ArrayList의 문제점

public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView myXmlContent = (TextView)findViewById(R.id.my_xml); 
     String stringXmlContent; 
try { 
    stringXmlContent = getEventsFromAnXML(this); 
    myXmlContent.setText(stringXmlContent); 
} catch (XmlPullParserException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
    } 
    boolean na=false; 
    List<Agency> agencies = new ArrayList(); 
    Agency agency=new Agency(); 
    int i=0; 
    private String getEventsFromAnXML(Activity activity) 
    throws XmlPullParserException, IOException 
    { 
    StringBuffer stringBuffer = new StringBuffer(); 
    Resources res = activity.getResources(); 
    XmlResourceParser xpp = res.getXml(R.xml.hotels); 
    xpp.next(); 
    int eventType = xpp.getEventType(); 

    while (eventType != XmlPullParser.END_DOCUMENT) 
    { 
    if(eventType == XmlPullParser.START_DOCUMENT) 
    { 
    stringBuffer.append("--- Start XML ---"); 
    } 
    else if(eventType == XmlPullParser.START_TAG) 
    { 
     if (xpp.getName().equals("DataBase")){ 
      agency.ResetTsp(); 
      String name=xpp.getAttributeValue(null, "name"); 
      agency.setTspTitle(name); 
      na=true; 
      stringBuffer.append("\nAgence : "+ name); 
     } 
     if (xpp.getName().equals("Title")){ 
      xpp.next(); 
      agency.setTitle(xpp.getText()); 
      stringBuffer.append("\nFiliale: "+xpp.getText()); 
      xpp.nextTag(); 
     } 
     if (xpp.getName().equals("Address")){ 
      xpp.next(); 
      agency.setAddress(xpp.getText()); 
      stringBuffer.append("\nAdresse: "+xpp.getText()); 
      xpp.nextTag(); 
     } 

     if (xpp.getName().equals("Phone") && na==true){ 
      xpp.next(); 
      agency.setTspPhone(xpp.getText()); 
      stringBuffer.append("\nPhone: "+xpp.getText()); 
      xpp.nextTag(); 
     }else{ 
      if (xpp.getName().equals("Phone") && na==false){ 
       xpp.next(); 
       agency.setPhone(xpp.getText()); 
       stringBuffer.append("\nPhone: "+xpp.getText()); 
       xpp.nextTag(); 
      } 

     } 

     if (xpp.getName().equals("Fax")){ 
      xpp.next(); 
      agency.setFax(xpp.getText()); 
      stringBuffer.append("\nFax: "+xpp.getText()); 
      xpp.nextTag(); 
     } 

     if (xpp.getName().equals("e-Mail")){ 
      xpp.next(); 
      agency.setMail(xpp.getText()); 
      stringBuffer.append("\ne-Mail: "+xpp.getText()); 
      xpp.nextTag(); 
     } 
     if (xpp.getName().equals("Latitude")){ 
      xpp.next(); 
      agency.setLatitude(Double.parseDouble(xpp.getText())); 
      stringBuffer.append("\nLatitude: "+xpp.getText()); 
      xpp.nextTag(); 
     } 
     if (xpp.getName().equals("Longitude")){ 
      xpp.next(); 
      agency.setLongitude(Double.parseDouble(xpp.getText())); 
      stringBuffer.append("\nLongitude: "+xpp.getText()); 
     } 


    } 
    else if(eventType == XmlPullParser.END_TAG) 
    { 
     if (xpp.getName().equals("DataBase") || xpp.getName().equals("Agency")){ 
      agencies.add(i,agency); 
      i=i+1; 
      Agency agency = new Agency(); 
     } 
    } 


    eventType = xpp.next(); 
    } 
    stringBuffer.append("\n--- End XML ---"); 
    return stringBuffer.toString(); 
    } 
} 

당신에게

답변

3

당신은 단지 당신이 할 때마다 재사용되는 하나 개 Agency 객체를 생성 한 감사 : 사람을 돕거나 설명 할 수있는 경우 여기에 내 코드입니다. ArrayList은 객체에 대한 참조 배열 일 뿐이며이 경우 동일한 객체를 반복해서 계속 추가합니다. ArrayList에 추가 할 때마다 새 Agency 개체를 만들어야합니다.

은 내가 XMLParser 구문이 익숙하지 않은,하지만 난 당신이 변경되면 생각 :

Agency agency = new Agency(); 

else if(eventType == XmlPullParser.END_TAG) 

agency = new Agency(); 

에 그것을 수정해야합니다.

+0

간단하고 신뢰할 수있는 솔루션입니다. 대단히 감사합니다. 문제가 해결되었습니다. – Houssem