Как повторно использовать j2me kxml parser?
Я использую парсер kxml для моего приложения j2me. Я читаю файл из памяти телефона и анализирую XML-файл для отображения данных (имеют различный уровень фильтрации). На каждом фильтре мне нужно прочитать данные из этого файла. Впервые я создал парсер и каждый раз заново назначаю этот парсер1(эталонный оригинал) paerser2(используется для разбора данных). В первый раз я получил правильный ответ, но во второй раз у меня нет содержимого файла, которое показывает ноль в качестве данных.
Вот мой код:
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;
}
}
}
1 ответ
Решение
Если твой InputStream
возвращает true при вызове markSupported вы можете reset
это в конце fileparser
метод, но сначала нужно позвонить mark
сразу после создания.
if (in.markSupported()) {
in.mark(in.available());
}