Al intentar acceder al metodo interno de un objeto perteneciente a un arraylist, si intento acceder desde un array creado a partir de objetos creados como variable global los metodos funcionan pero si los objetos pertenecientes al arraylist han sido generados como variable local dentro de un metodo , esto me devuelven null
Cuando se llama a la clase si se ejecuta por primera vez lee el objeto que se le pasa en la constructora y escribe un documento xml con entradas mediante el arraylist que le paso como parametro al metodo
sin embargo si no es la primera vez que se ejecuta este primero lee el doc xml y crea dentro del metodo leer los objetos una vez leidos todos creo un arraylist de estos objetos y lo devuelvo
Cuando lo recibo añado el nuevo objeto al arraylist recibido y o mando al metodo de escribir, si embargo cuando leo la info de los objetos con los metodos get de cada objeto me devuelve un null
Este es el code
Código:
package com.asde.ipac; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.util.Xml; import android.widget.Toast; class AsyncLoadXML extends AsyncTask<Boolean, Integer, String> { private Context ctx; private List<Pregunta> preguntas; private Pregunta pregunta; String TAG; public AsyncLoadXML(Context c, String g, String p, String r) { this.ctx = c; pregunta =new Pregunta(); pregunta.setGrupo(g); pregunta.setPregunta(p); pregunta.setRespuesta(r); } @Override protected String doInBackground(Boolean... start) { String mens; if(!start[0]){ try { preguntas = leerXML(ctx); Log.d(TAG, "\t" + "despues de leer" + " = " + preguntas.size()); preguntas.add(this.pregunta); Log.d(TAG, "\t" + "despues de leer y añadir" + " = " + preguntas.size());} catch (IOException e) { e.printStackTrace(); } } else {preguntas = new ArrayList<Pregunta>(); preguntas.add(this.pregunta); Log.d(TAG, "\t" + "inicial" + " = " + preguntas.size());} try { mens=escribirXML(ctx, preguntas); Log.d(TAG, "11"+mens+"11");} catch (IOException e) { e.printStackTrace(); } return "done"; } protected void onPostExecute(String result) { if(!result.equals("")) Toast.makeText(this.ctx, result, Toast.LENGTH_LONG).show(); } public String escribirXML(Context ctx, List<Pregunta> preg) throws IOException{ FileOutputStream fout = null; try { fout = ctx.openFileOutput("answers.xml", Context.MODE_PRIVATE); } catch (FileNotFoundException e) { return e.getMessage(); // Toast.makeText(ctx, e.getMessage(), Toast.LENGTH_LONG).show(); } Log.d(TAG, "entroEscribir"); Log.d(TAG, "d"+preg.size()+"d"); XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(fout, "UTF-8"); serializer.startDocument(null, true); serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); serializer.startTag(null, "preguntas"); Log.d(TAG, "aqui1"); for( int pr=0; pr<preg.size(); pr++){ Log.d(TAG, "aqui2"); serializer.startTag(null, "pregunta"); Log.d(TAG, "a3"); serializer.attribute(null,"grupo" , preg.get(pr).getGrupo().toString()); Log.d(TAG, "a4"); serializer.attribute(null,"pregunta" , preg.get(pr).getPregunta().toString()); Log.d(TAG, "a5"); serializer.text( preg.get(pr).getRespuesta().toString()); Log.d(TAG, "a6"); Log.d(TAG, "leyendo " + preg.get(pr).getGrupo().toString() + " " + preg.get(pr).getPregunta().toString()); serializer.endTag(null, "pregunta"); } serializer.endTag(null, "preguntas"); serializer.endDocument(); serializer.flush(); fout.close(); return "done"; // Toast.makeText(ctx, "Escrito correctamente", Toast.LENGTH_LONG).show(); } catch (Exception e) { Log.d(TAG, "e"+e.getMessage()+"e"); return e.getMessage(); // Toast.makeText(ctx, e.getMessage(), Toast.LENGTH_LONG).show(); } } public List<Pregunta> leerXML(Context ctx) throws IOException{ FileInputStream fin = null; List<Pregunta> preguntasleidas= new ArrayList<Pregunta>(); Pregunta preguntaleida =new Pregunta(); try { fin = ctx.openFileInput("answers.xml"); } catch (Exception e) { Toast.makeText(ctx, e.getMessage() + " h1", Toast.LENGTH_LONG).show(); } Log.d(TAG, "entroLeer"); XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(fin, "UTF-8"); int event = parser.next(); while(event != XmlPullParser.END_DOCUMENT) { if(event == XmlPullParser.START_TAG) { Log.d(TAG, "< 222 " + parser.getName() + ">"); for(int i = 0; i < parser.getAttributeCount(); i++) { if(parser.getAttributeName(i) == "grupo") preguntaleida.setGrupo(parser.getAttributeValue(i).toString()); else if(parser.getAttributeName(i) == "pregunta") preguntaleida.setPregunta(parser.getAttributeValue(i).toString()); Log.d(TAG, "\t HO2" + parser.getAttributeName(i) + " = " + parser.getAttributeValue(i)); } // } } if(event == XmlPullParser.TEXT && parser.getText().trim().length() != 0) {preguntaleida.setRespuesta(parser.getText().toString()); Log.d(TAG, "\t\t HO3" + parser.getText()); preguntasleidas.add(preguntaleida); } if((event == XmlPullParser.END_TAG)) { Log.d(TAG, "</" +"HO4 "+ parser.getName() + ">");} event = parser.next(); } fin.close(); //Toast.makeText(ctx, "Leido correctamente", Toast.LENGTH_LONG).show();//a�adir al final del archivo } catch (Exception e) { // Toast.makeText(ctx, e.getMessage() + " h2", Toast.LENGTH_LONG).show(); e.printStackTrace(); } return preguntasleidas; } }