在Android中读取XML文件
问题描述:
我有一个questions.xml文件,其中包含我的测验的问题列表,并且我试图将其读入我的程序中的问题库。我写了下面的方法:在Android中读取XML文件
// Creates the QuestionBank according to user requirements
public ArrayList<Question> createQuestionBank(String diff) {
int eventType = -1;
boolean FoundQuestions = false;
QuestionBank = new ArrayList<Question>();
// Find Question records from XML
System.out.println("check 1");
while (eventType != XmlResourceParser.END_DOCUMENT) { // Keep reading until the end of the xml file
System.out.println("check 2");
if (eventType == XmlResourceParser.START_TAG) {
System.out.println("check 3");
String Name = questionList.getName();
if (Name.equals("question")){ // Check whether the tag found is the one for question
System.out.println("check 4");
// Check difficulty of question
String diffCheck = questionList.getAttributeValue(null, "difficulty");
if (diff.equals("Any") || diff.equals(diffCheck)){
FoundQuestions = true;
System.out.println("check 5");
createandaddquestion();
System.out.println("check 6");
}
}
try {
eventType = questionList.next();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return QuestionBank;
}
我设置了一些输出语句来标识我的程序出错了。该方法输出CHECK2的无限循环,永不进展检查3,所以被卡住的语句:
if (eventType == XmlResourceParser.START_TAG)
我已经适应了一些代码,我在其他地方发现的,不完全明白发生了什么。我的理解是,这个陈述找到了标签的起始部分,然后我进一步检查这是否是表示我的问题条目开始的问题标签; eventType究竟是什么?显然它是一个整数,但为什么XMLResourceParser.START_TAG在找到标记时返回一个整数?当然,做一个布尔值会更有意义吗?从上面的帖子,我不认为我需要强调,我对android非常陌生,所以请耐心等待!提前致谢。
答
在我看来,eventType永远不会得到更新。我对XML解析的细节知之甚少,但似乎eventType需要更新,否则你将陷入无限循环,因为你目前被卡住了。我是从看你的代码,你要向下移动该代码一组支架的猜测:
try {
eventType = questionList.next();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这将确保它的同时()命令的每一个循环中调用。
+2
谢谢你!在此之后完成工作!你不会碰巧知道你究竟是什么事件类型?我并没有真正了解android开发者网站。 – user1058210 2012-01-05 15:19:04
+1 Pearsonartphoto在他的假设中可能是正确的。另外我的经验是,使用SAX解析器在Android上效率要高得多 - 至少在早期版本中。 20秒来解析文件与不到一秒钟。 – 2012-01-05 15:05:06
@MarkGjøl谢谢马克!我非常担心我的最终程序的稳定性,所以我现在肯定会考虑SAX解析器。 – user1058210 2012-01-05 15:20:17