퀴즈에 대한 질문 목록이있는 questions.xml 파일이 있는데, 이것을 내 프로그램의 질문 은행으로 읽으려고합니다. 나는 다음과 같은 방법을 쓴 :안드로이드에서 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에서 정수를 반환하는 이유는 무엇입니까? 분명히 부울이되는 것이 더 합리적일까요? 위의 게시물에서 나는 내가 안드로이드에 매우 익숙하다는 것을 강조 할 필요가 없다고 생각합니다. 미리 감사드립니다.
+1 아마도 Pearsonartphoto가 그의 가정에서 맞을 것입니다. SAX 파서를 사용하는 것이 적어도 초기 버전에서는 안드로이드에서 훨씬 효율적입니다. 파일을 구문 분석하는 데 20 초가 걸리고 1 초 미만입니다. –
@ MarkGjøl Thanks Mark! 저는 최종 프로그램이 얼마나 안정적인지 걱정하고 있습니다. 그래서 지금 SAX 파서를 확실히 조사 할 것입니다. – user1058210