SAX en Android es cada vez llama varias veces con los mismos datos, pero compensado
Pregunta
Estoy tratando de analizar un archivo XML usando SAX con Android y el problema es que los caracteres de función (...) está consiguiendo llamar varias veces con lo que parece ser los mismos datos simplemente compensado por unos pocos caracteres.
Como se puede deducir de la salida por debajo de la primera vez que se llama a la "\ talabama" y la segunda vez que se llama a la "Labama". No estoy seguro de por qué está haciendo esto, pero si alguien puede ayudar a que sería impresionante.
Entrada XML:
<?xml version="1.0" encoding="utf-8"?>
<dir><name>.</name>
<dir><name>alabama</name>
<dir><name>sub_dir_name</name>
<file><name>file_name.kml</name></file>
</dir>
</dir>
</dir>
Salida de caracteres (...):
10-27 23:04:47.033: DEBUG/LocationHandler(10299):
10-27 23:04:49.000: DEBUG/LocationHandler(10299): alabama
10-27 23:04:51.835: DEBUG/LocationHandler(10299): labama
10-27 23:04:52.129: DEBUG/LocationHandler(10299): labama abama
10-27 23:04:52.408: DEBUG/LocationHandler(10299): labama abamasub_dir_name
10-27 23:04:52.519: DEBUG/LocationHandler(10299): ub_dir_name
10-27 23:04:52.649: DEBUG/LocationHandler(10299): ub_dir_name _dir_name
10-27 23:04:52.809: DEBUG/LocationHandler(10299): ub_dir_name _dir_namefile_name.kml
10-27 23:04:52.989: DEBUG/LocationHandler(10299): ile_name.kml
10-27 23:04:53.158: DEBUG/LocationHandler(10299): ile_name.kml le_name.kml
10-27 23:04:53.358: DEBUG/LocationHandler(10299): le_name.kml
10-27 23:04:53.529: DEBUG/LocationHandler(10299): le_name.kml le_name.kml
10-27 23:04:53.698: DEBUG/LocationHandler(10299): le_name.kml
Handler overides:
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
_currentElementValue = "";
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
_currentElementValue += new String(ch);
Log.d(TAG, _currentElementValue);
}
Solución
Veo un problema evidente en su código, en los caracteres () método, no se puede crear una cadena ciegas con sólo la matriz de caracteres. Debe ser como esta a continuación:
public void characters(char[] ch, int start, int length) throws SAXException
{
_currentElementValue += new String(ch, start, length);
Log.d(TAG, _currentElementValue);
}
Es posible que desee obtener más información sobre cómo analizar SAX obras.