2012-01-05 46 views
1

我有一个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非常陌生,所以请耐心等待!提前致谢。

+2

+1 Pearsonartphoto在他的假设中可能是正确的。另外我的经验是,使用SAX解析器在Android上效率要高得多 - 至少在早期版本中。 20秒来解析文件与不到一秒钟。 – 2012-01-05 15:05:06

+1

@MarkGjøl谢谢马克!我非常担心我的最终程序的稳定性,所以我现在肯定会考虑SAX解析器。 – user1058210 2012-01-05 15:20:17

回答

4

在我看来,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