2012-04-02 24 views
1

這是一個Android應用程序,我有我想讀一個名爲「categories.xml」的XML文件:如何從一個XML文件,將數據添加到一個ArrayList

<?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添加「請選擇一個命令」。

感謝您的時間和幫助,zeokila

回答

1

的關鍵將是這條線......

int eventType = parser.getEventType(); 

...因爲它是while {...}循環和它以外永遠不會改變。

這意味着while條件,使你最終一邊喊parser.next()迫使它過去的檔案結尾可能引起異常eventType != XmlPullParser.END_DOCUMENT永遠不會是假的。

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爲0至categorys.add(...)

+0

感謝您的幫助:) – 2012-04-02 18:11:49

+0

高興,這是有益的。 – Squonk 2012-04-02 18:17:23

相關問題