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);
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);