2012-01-05 26 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が整数を返すのはなぜですか?確かにブール値であることが理にかなっていますか?上記の投稿から、私はあなたにアンドロイドにとって非常に新しいことを強調する必要はないと思いますので、気をつけてください!前もって感謝します。

+2

+1おそらくPearsonartphotoはおそらく彼の前提です。 SAXパーサーを使用することは、少なくとも初期のバージョンでは、Android上ではるかに効率的です。ファイルを解析するのに20秒かかります。 –

+1

@MarkGjølThanks 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