2011-01-07 5 views
1

私はリソースからxmlファイルを読んでいます。そのファイルには旅行代理店の住所と住所のリストが含まれています。このリストをarraylistで解析した後にマップに使用しようとしています。だから、私はagencies.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(); 
    } 
} 

はあなたがするたびに再利用されている1つのAgencyオブジェクトが作成されているあなたに

答えて

3

に感謝します。 ArrayListは、オブジェクトへの参照の配列に過ぎません。この場合、同じオブジェクトを何度も何度も何度も追加し続けます。 ArrayListに追加するたびに、新しいAgencyオブジェクトを作成する必要があります。

私はXMLParser構文とその慣れていないんだけど、あなたが変更した場合、私は思う:

Agency agency = new Agency(); 

agency = new Agency(); 

else if(eventType == XmlPullParser.END_TAG) 

以内に、それはそれを修正する必要があります。

+0

シンプルで信頼性の高いソリューション、ありがとう、それは私のprobを修正しました。 – Houssem

関連する問題