2

j2me アプリケーションに kxml パーサーを使用しています。電話のメモリからファイルを読み取り、xml ファイルを解析してデータを表示しています (さまざまなレベルのフィルターがあります)。各フィルターで、このファイルからデータを読み取る必要があります。初めてパーサーを作成し、毎回このパーサー1(参照元)をpaerser2(データの解析に使用)に再割り当てします。初めて正しい答えを得ましたが、2回目はファイルの内容を取得できず、データとしてnullが表示されます。

これが私のコードです:

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;
    }
}
}
4

1 に答える 1

2

markSupportedInputStreamの呼び出しで true を返す場合は、メソッドの最後でそれを行うことができますが、最初に、作成直後に呼び出す必要があります。resetfileparsermark

if (in.markSupported()) {
  in.mark(in.available());
}
于 2012-09-18T16:38:35.013 に答える