Rocio Saiz
unread,Nov 12, 2011, 5:06:06 AM11/12/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to desarrolladores-android
Hola a todos, os comento tengo una clase que lee un fichero xml desde
la sd card. Para leerlo empleo Dom os pongo el codigo:
package mi.proyecto;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import android.util.Log;
public class RssParserDom
{
public RssParserDom()
{}
public List<Pregunta> parse()
{
InputStream obj_is = null;
Document dom = null;
DocumentBuilderFactory factory=null;
DocumentBuilder db=null;
List<Pregunta> preguntas = new ArrayList<Pregunta>();
try
{
obj_is = new FileInputStream("/sdcard/fichero.xml");
//Instanciamos la fábrica para DOM
factory = DocumentBuilderFactory.newInstance();
//Creamos un nuevo parser DOM
db = factory.newDocumentBuilder();
dom = db.parse(obj_is);
//Nos posicionamos en el nodo principal del árbol (<quiz>)
Element root = dom.getDocumentElement();
//Localizamos todos los elementos <question type>
NodeList questiontype =
root.getElementsByTagName("question type");
//Recorremos la lista de preguntas
for (int i=1; i<questiontype.getLength(); i++)
{
Pregunta pregunta = new Pregunta();
//Obtenemos la pregunta actual
Node item = questiontype.item(i);
//Obtenemos la lista de datos de la pregunta actual
NodeList datosPregunta = item.getChildNodes();
//Procesamos cada dato de la pregunta
for (int j=0; j<datosPregunta.getLength(); j++)
{
Node dato = datosPregunta.item(j);
String etiqueta = dato.getNodeName();
if (etiqueta.equals("questiontext format"))
{
pregunta.setContenido(dato.getFirstChild().getNodeValue());
}
else if (etiqueta.equals("answer fraction"))
{
String texto = obtenerTexto(dato);
pregunta.setPuntuacionTrue(texto);
}
else if (etiqueta.equals("answer fraction"))
{
String texto = obtenerTexto(dato);
pregunta.setPuntuacionFalse(texto);
}
}
preguntas.add(pregunta);
}
}
catch (Exception ex)
{
Log.e("Ficheros", "Error al intentar leer el xml");
//throw new RuntimeException(ex);
}
return preguntas;
}
private String obtenerTexto(Node dato)
{
StringBuilder texto = new StringBuilder();
NodeList fragmentos = dato.getChildNodes();
for (int k=0;k<fragmentos.getLength();k++)
{
texto.append(fragmentos.item(k).getNodeValue());
}
return texto.toString();
}
}
desde la clase principal lo llamo, pero me salta la excepción error en
el for y no se que puede pasar
package mi.proyecto;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class AndroQuestionnaireActivity extends Activity
{
public static String pregun1="";
public static String pregun2="";
public static String pregun3="";
public static String pregun4="";
public static String pregun5="";
public static int veces=1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
List<Pregunta> preguntas= new ArrayList<Pregunta>();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
RssParserDom domparser=new RssParserDom();
preguntas = domparser.parse();
try
{
for(int i=0;i<=preguntas.size(); i++)
{
if (i==0)
pregun1=preguntas.get(i).getContenido();
else if(i==1)
pregun2=preguntas.get(i).getContenido();
else if (i==2)
pregun3=preguntas.get(i).getContenido();
else if( i==3)
pregun4=preguntas.get(i).getContenido();
else
pregun5=preguntas.get(i).getContenido();
}
}
catch (Exception e)
{
Log.e("error", "Error en el for");
}
}
catch (Exception e)
{
Log.e("error", "error al llamar a los constructores");
}
Button next = (Button) findViewById(R.id.button1);
next.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
Intent myIntent = new
Intent(AndroQuestionnaireActivity.this, primerapregunta.class);
startActivity(myIntent);
}
});
}
}
Alguien me puede ayudar??? Por favor!