Acceder

Ver la Versión Completa : [ SOLUCIONADO ] XMLPull


Afsoon
17/01/12, 16:32:22
Hola buenas, es una consulta muy rápida.
Tengo el parser hecho pero cuando hago el debug a la app para la lista que recibe el parser este me sigue manteniendo como "null", es decir, que no recibe nada y entonces que se supone que he hecho mal, yo caigo que es el InputStream cuando digo el archivo.
El archivo lo tengo creado con fileOpenOuput(), de hay que la ruta sea tan larga que veréis, creo que el fallo es hay porque el código dudo que este mal. La razón por la que pienso esto es porque lo hice con DOM hasta que vi que para XML grandes no es bueno en smartphones entonces ese sera mi caso y lo quite y lo con Pull que es lo que lo recomienda.
Una última duda, el array que obtengo de este parser se trata igual que la array normal o es un poco diferente porque con DOM me daba un array de size 0 y me era imposible de tratar, se que null no era pero no sabia como obtener nada por eso ya que estoy preguntando lo de Pull.

Aqui tenéis el código:
Parser

public List<TeachersData> parse(InputStream is){
List<TeachersData> noticias = null;
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(is, null);
int evento = parser.getEventType();
TeachersData noticiaActual = null;
while (evento != XmlPullParser.END_DOCUMENT)
{
String etiqueta = null;
switch (evento)
{
case XmlPullParser.START_DOCUMENT:
noticias = new ArrayList<TeachersData>();
break;
case XmlPullParser.START_TAG:
etiqueta = parser.getName();
if (etiqueta.equals("profesores"))
{
noticiaActual = new TeachersData();
}
else if (noticiaActual != null)
{
if (etiqueta.equals("nombre"))
{
noticiaActual.setNombre(parser.getAttributeName(pa rser.getAttributeCount()));
}
else if (etiqueta.equals("apellido"))
{
noticiaActual.setApellido(parser.getAttributeName( parser.getAttributeCount()));
}
else if (etiqueta.equals("despacho"))
{
noticiaActual.setUbicacion_del_departamento(parser .getAttributeName(parser.getAttributeCount()));
}
else if (etiqueta.equals("email"))
{
noticiaActual.setEmail(parser.getAttributeName(par ser.getAttributeCount()));
}
else if (etiqueta.equals("asignatura"))
{
noticiaActual.setAsignatura(parser.getAttributeNam e(parser.getAttributeCount()));
}
}
break;
case XmlPullParser.END_TAG:
etiqueta = parser.getName();
if (etiqueta.equals("profesores") && noticiaActual != null)
{
noticias.add(noticiaActual);
}
break;
}
evento = parser.next();
}
}
catch (Exception ex){
throw new RuntimeException(ex);
}
return noticias;
}


Ejecutar el parser

InputStream is = openFileInput("/data/data/com.student/files/data.xml");
ReadInitXML rixml = new ReadInitXML();
List<TeachersData> td = rixml.parser(is);

Afsoon
19/01/12, 20:31:19
A nadie se le ocurre nada para arreglarlo, porque no se me ocurre nada sino lo pongo en StackOverflow porque era mi ultimo recurso para ponerlo.
Porque el maldito XML me están tocando un poco las pe****s, como es la primera vez que uso XML y que con DOM me leyera el archivo y con Pull no, porque la prueba esta en el array que es null.

Afsoon
21/01/12, 12:43:35
Arreglado, tras leer el log una y otra vez y que no lo sacaba, ya vi el problema. Se encontraba en la estructura del XML porque como tenia la antigua que estaba bien, no pense ese problema hasta que vi el nuevo y estaba deformado. El Array si me coge los datos y me los muestras. De ahora en adelante a usar solo XMLPull en Android

kriogeN
21/01/12, 13:50:06
Yo uso SAX, y la verdad es que está bastante bien. Aunque al final vienen a ser todos practicamente iguales, es acostumbrarte a usar uno y dominarlo.

Afsoon
21/01/12, 17:51:24
Yo uso SAX, y la verdad es que está bastante bien. Aunque al final vienen a ser todos practicamente iguales, es acostumbrarte a usar uno y dominarlo.

Pero al parecer el que recomienda en varios sitios y uno de ellos es StackOverflow, recomienda el uso de XMLPull en Android porque a diferencia de DOM no se carga en memoria y de Sax que no me acuerdo. Además si usas archivos muy grandes con SAX y DOM iria lento el movil y yo usare archivos grandes porque es un programa recordatorio en los estudios.