android - ArrayList 的问题

标签 android arraylist

我正在从资源中读取一个 xml 文件,该文件包含旅行社位置和地址的列表,我试图在解析后将此列表放入数组列表中以将其与 map 一起使用。所以每次我使用 agencies.add(agency) 它都会将它添加到数组中,但也会用新值更改所有以前的项目。如果有人可以提供帮助或解释,这是我的代码:

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();
  }
}

谢谢

最佳答案

您只创建了一个 Agency 对象,您每次都在重复使用该对象。 ArrayList 只是对象引用的数组,在这种情况下,您只需一遍又一遍地添加相同的对象。每次要将它添加到 ArrayList 时,都需要创建一个新的 Agency 对象。

我不太熟悉 XMLParser 语法,但我认为如果您更改:

 Agency agency = new Agency();

agency = new Agency();

else if(eventType == XmlPullParser.END_TAG)

它应该修复它。

关于android - ArrayList 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624656/

相关文章:

java - 为什么我的代码有 IllegalStateException 错误

android - 创建一个在 Android 手机插接时显示的应用程序

java - 时间选择器每分钟执行计划任务,直到达到设定时间,而不是仅在设定时间执行

java - 在 Libgdx 中,如何获取图像旋转时的 x、y 坐标?

java - 下面代码中的列表迭代列表——哪种方法更好?

java - 更改数组列表中的值

android - Android 上的 cocos2d-x 屏幕闪烁

android - 可重用 View 组

java.lang.OutOfMemoryError - 有什么方法可以在不增加内存的情况下解决这个问题吗?

java - 从 arraylist 调用子类方法