2012-01-05 3 views
1

퀴즈에 대한 질문 목록이있는 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에서 정수를 반환하는 이유는 무엇입니까? 분명히 부울이되는 것이 더 합리적일까요? 위의 게시물에서 나는 내가 안드로이드에 매우 익숙하다는 것을 강조 할 필요가 없다고 생각합니다. 미리 감사드립니다.

+2

+1 아마도 Pearsonartphoto가 그의 가정에서 맞을 것입니다. SAX 파서를 사용하는 것이 적어도 초기 버전에서는 안드로이드에서 훨씬 효율적입니다. 파일을 구문 분석하는 데 20 초가 걸리고 1 초 미만입니다. –

+1

@ MarkGjøl Thanks Mark! 저는 최종 프로그램이 얼마나 안정적인지 걱정하고 있습니다. 그래서 지금 SAX 파서를 확실히 조사 할 것입니다. – user1058210

답변

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

고마워요! 그 후 완벽하게 일했습니다! eventType이 정확히 무엇인지 알지 못합니까? 나는 안드로이드 개발자 웹 사이트를 정말로 이해하지 못했다. – user1058210