2012-09-18 21 views
2

我正在爲我的j2me應用程序使用kxml解析器。我正在從手機內存中讀取文件並解析xml文件以顯示數據(具有各種級別的過濾器)。在每個過濾器上,我需要從這個文件讀取數據。我第一次創建解析器,每次我將這個parser1(reference-original)重新分配給paerser2(用於解析數據)。我第一次得到正確的答案,但第二次沒有得到文件內容,它顯示爲空數據。如何重用j2me kxml解析器?

這裏是我的代碼:

FileConnection fc = (FileConnection)Connector.open(rmsObj.rmsData.elementAt(0).toString()); 
InputStream in = fc.openInputStream(); 
InputStreamReader is = new InputStreamReader(in); 
commonAppObj.externParser = new XmlParser(is); 

commonAppObj類文件。

protected void fileread() { 
    try { 
     if(externParser != null){ 
      parser = externParser; 
      fileparser(parser); 
     }else{ 
      InputStream in = this.getClass().getResourceAsStream(this.dataBase); 
      InputStreamReader is = new InputStreamReader(in); 
      parser = new XmlParser(is); 
      fileparser(parser); 
     } 
    } catch (IOException ioe) { 
    } finally { 
     parser = null; 
    } 
} 

private void fileparser(XmlParser parser){ 
    try { 
     ParseEvent event = null; 
     dataflag = 0; 
     dataflagS = 0; 
     System.out.println("findtags = " + findtags); 
     while (((event = parser.read()).getType() != Xml.END_DOCUMENT) && (dataflag != 1)) { 
      if (event.getType() == Xml.START_TAG) { 
       String name = event.getName(); 
       if (name != null && name.equals(findtags)) { 
        dataflag = 0; 
        parseAddressTag(parser); 
       } 
       name = null; 
      } 
      event = null; 
     } 
    } catch (IOException ioe) { 
    } finally { 
     parser = null; 
    } 
} 
} 

回答

2

如果您InputStream返回到markSupported通話則您可能會在fileparser方法結束reset,但首先你需要在創建後立即打電話給mark

if (in.markSupported()) { 
    in.mark(in.available()); 
} 
+0

謝謝您的回覆,但是,當我想這我得到這個錯誤產生java.io.IOException:重置爲無效標誌 –

+1

謝謝您的回答聖特爾莫先生皮門特爾莫塔。我完成了這個任務。我對代碼所做的更改是「in.mark(fc.filesize())」,重置現在可以正常工作。 –

+0

知道它的工作原理是很好的。如果我的回答對您有幫助,請將其標記爲正確。 :) –