Следующий код используется для получения XML-файла с веб-сервера, и сегодня, для последних нескольких запусков, возникает исключение с сообщением об ошибке «Поток закрыт». Со вчерашнего дня я не изменял этот код, а также не модифицировал никакие методы, обрабатывающие синтаксический анализ.
Идея состоит в том, чтобы построить список элементов из файла XML, извлеченного из fullurl
. В списке должно быть 20 элементов (на основе XML-файла, который я сейчас использую). В последних нескольких запусках операция синтаксического анализа вызвала исключение, упомянутое выше, и хранит только 5 элементов. Метод public void endDocument()
никогда не вызывается.
Любые мысли были бы полезны, поскольку их необходимо перенести в фоновую задачу, и я бы хотел решить ее до того, как это сделаю.
public void getAndParseXML() {
HttpConnection xmlcon = null;
InputStream xmlinput = null;
SAXParserFactory spf = null;
String fullurl = this.getNewsUrl() + NewsListBuilderTask.CONNECTION_STRING; // URL of XML file along specification for connection type
if ( (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_WIFI)) && (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_WIFI)) )
fullurl += NewsListBuilderTask.WIFI_STRING;
try {
xmlcon = (HttpConnection)Connector.open( fullurl, Connector.READ, false ); // open connection to XML source
spf = SAXParserFactory.newInstance(); // set up xml parsers
xmlinput = xmlcon.openInputStream(); // set up input stream
SAXParser saxparser = spf.newSAXParser(); // create a new parser object
saxparser.parse( xmlinput, this ); // parse operations start here
}
catch( IOException ex ) {
System.out.println( "IOException Caught:\t" + ex.getMessage() ); // set a default item if any exception occurs with retreiving or parsing XML file
this.createDefaultItem();
}
catch (SAXException ex) {
System.out.println( "SAXException Caught:\t" + ex.getMessage() );
ex.printStackTrace();
this.createDefaultItem();
}
catch ( IllegalArgumentException ex ) {
System.out.println( "IllegalArgumentException Caught:\t" + ex.getMessage() );
ex.printStackTrace();
this.createDefaultItem();
}
catch (ParserConfigurationException ex) {
System.out.println( "ParserConfigurationException Caught:\t" + ex.getMessage() );
ex.printStackTrace();
this.createDefaultItem();
}
finally {
if ( xmlinput != null) {
try {
xmlinput.close(); // attempt to close all connections
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if ( xmlcon != null ) {
try {
xmlcon.close();
}
catch ( IOException ex ) {
ex.printStackTrace();
}
}
}
}
ПРИМЕЧАНИЕ. Используемое fullurl
заканчивается bieng "http://somexmlfile.com?type=photo;deviceside=true"
с добавлением ";interface=wifi"
, если доступно.