![](/img/trans.png)
[英]How can I add the objects from a file into ArrayList? getting a EOFException
[英]How can I add data from an XML file to an 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中。
謝謝您的時間和幫助,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
,並且我懷疑您還希望在每次調用categorys.add(...)
之后將Categories
重置為0 categorys.add(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.