java - 如何将数据从 XML 文件添加到 ArrayList

标签 java android arraylist

这是一个 Android 应用程序,我有一个 XML 文件,我想阅读名为“categories.xml”的文件:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<categories>
  <category>
    <name>Simulator Commands</name>
    <id>1</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>2</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>3</id>
  </category>
  <category>
    <name>General Aircraft Commands</name>
    <id>4</id>
  </category>
  <category>
    <name>Light Commands</name>
    <id>5</id>
  </category>
  <category>
    <name>Radio Commands</name>
    <id>6</id>
  </category>
  <category>
    <name>Autopilot Commands</name>
    <id>7</id>
  </category>
  <category>
    <name>Intrument Commands</name>
    <id>8</id>
  </category>
  <category>
    <name>View Commands</name>
    <id>9</id>
  </category>
  <category>
    <name>Slew Keys</name>
    <id>10</id>
  </category>
  <category>
    <name>Mission Commands</name>
    <id>11</id>
  </category>
  <category>
    <name>Multiplayer Commands</name>
    <id>12</id>
  </category>
  <category>
    <name>C172 Intrument Panels</name>
    <id>13</id>
  </category>
  <category>
    <name>BE58 Intrument Panels</name>
    <id>14</id>
  </category>
</categories>

我想将标签中的文本添加到名为“categorys”的 ArrayList。我试过这个:

ArrayList<String> categorys = new ArrayList<String>();
        categorys.add("Please select a category");
        //START ADDING HERE
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();
        File file = new File(Environment.getExternalStorageDirectory()+ "/fsx_kneeboard/categories.xml");
        FileInputStream fis = new FileInputStream(file);
        parser.setInput(new InputStreamReader(fis));
        parser.next();
        int eventType = parser.getEventType();
        int Categories = 0;
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                Categories++;
            } if (eventType == XmlPullParser.START_TAG && Categories == 1) {
                Categories++;
            } if (eventType == XmlPullParser.START_TAG && Categories == 2) {
                categorys.add(parser.getText());
            }
            parser.next();
        }

但是这部分的东西:

while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {
                    Categories++;
                } if (eventType == XmlPullParser.START_TAG && Categories == 1) {
                    Categories++;
                } if (eventType == XmlPullParser.START_TAG && Categories == 2 && parser.getName.equals("name")) {
                    categorys.add(parser.getText());
                }
                parser.next();
            }

让它强制关闭,我确定是这部分出错了,因为如果我删除它,它不会强制关闭,只会将“请选择一个命令”添加到 ArrayList。

Thanks for your time and help, zeokila

最佳答案

关键是这一行...

    int eventType = parser.getEventType();

...因为它在 while {...} 循环之外并且它永远不会改变。

这意味着 while 条件 eventType != XmlPullParser.END_DOCUMENT 永远不会为假,因此您最终会重复调用 parser.next()强制它超过文件末尾可能会导致异常。

    int eventType = parser.getEventType();
    int Categories = 0;
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            Categories++;
        } if (eventType == XmlPullParser.START_TAG && Categories == 1) {
            Categories++;
        } if (eventType == XmlPullParser.START_TAG && Categories == 2) {
            categorys.add(parser.getText());
        }
        parser.next();
    }

您需要在每次调用 parser.next() 后更新 eventType,我怀疑您还想将 Categories 重置为每次调用 categorys.add(...)

后为 0

关于java - 如何将数据从 XML 文件添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981029/

相关文章:

java - 多表 td 元素的 Xpath

java - LibGDX:皮肤+自定义坐标绘制不正确

java - ArrayList<Double> 插入(java)

java - 由各种类型的对象组成的ArrayList

android - canvas.scale(scale,scale,px,py) 抽动到一个新位置

java - 从群体中移除一条染色体?

java - 为什么接口(interface)根据类文件格式扩展对象?

java - 如何从应用程序的 "small"版本重定向到 "big"版本

Android调整作为base64字符串接收的大图像

Android 在不水平拉伸(stretch)视频的情况下将 VideoView 方向从纵向切换为横向