Problema serializando un arrayList de objetos

Para dar las gracias debes entrar o registrarte en el foro

Recién llegado
Recién llegado
Mensajes: 1 Agradecido: 0
29 Nov 2013, 00:23# 1

Estoy realizando un proyecto para el instituto y no soy capaz de hacer funcionar la serializacion de un arraylist de objetos.
Tengo una clase Curriculum, de la cual se crea un objeto y se introduce en un arrayList. Luego se serializa el arrayList.
En otra actividad, des-serializo el arrayList y lo introduzco en una ListView.

En esta ultima actividad, si creo un arraList y creo los objetos directamente en la actividad mediante su constructor y los meto en el arrayList, se me muestran en la lista. Sin embargo, si trato de des-serializar el arrayList y cargarlo en el ListView no muestra nada. El problema pues debe ser la serializacion, que no esta funcionando.

Les dejo a continuación la clase Curriculum, la clase GuardarCargarObjetos (que serializa el arraylist), y la Activity ListadoCV, donde des-serializo el arrayList y se pretende mostrar en una ListView. Tambien les dejo la Activity VistaPrevia, que es donde serializo el arrayList.
Los layouts no los meto porque como les digo, si creo los objetos manualmente en la Activity ListadoCV, los agrego al arrayList y cargo este en el ListView, la lista se muestra perfectamente... luego el fallo ha de estar en la serializacion... :(

En los últimos 3 días he invertido más de 20 horas intentando solucionarlo y he sido incapaz... la verdad es que estoy muy frustrado y no veo modo de arreglarlo, y sobre todo de aprender. Nuestra profesora nunca ha dado Android y de Java anda justita, por lo que no es capaz de resolver ninguna duda... La enseñanza pública española... lamentable. Gracias a todos!

CLASE Curriculum

Código: Seleccionar todo
package com.dam204.trabajoevaluacion;

import java.io.Serializable;

public class Curriculum implements Serializable {
   /**
    *
    */
   private static final long serialVersionUID = -1520731881414914436L;
   /**
    *
    */
   // DATOS PERSONALES
   String nombre;
   String apellido1;
   String apellido2;
   String dni;
   String email;
   String direccion;
   int cp;
   String localidad;
   String provincia;

   // DATOS ACADÉMICOS
   String titulacion;

   // EXPERIENCIA LABORAL
   String experiencia;

   // IMAGEN
   int logotipo;

   public Curriculum(String nombre, String apellido1, String apellido2,
         String dni, String email, String direccion, int cp,
         String localidad, String provincia, String titulacion,
         String experiencia, int logotipo) {
      this.nombre = nombre;
      this.apellido1 = apellido1;
      this.apellido2 = apellido2;
      this.dni = dni;
      this.email = email;
      this.direccion = direccion;
      this.cp = cp;
      this.localidad = localidad;
      this.provincia = provincia;
      this.titulacion = titulacion;
      this.experiencia = experiencia;
      this.logotipo = logotipo;
   }

   public String getNombre() {
      return nombre;
   }

   public void setNombre(String nombre) {
      this.nombre = nombre;
   }

   public String getApellido1() {
      return apellido1;
   }

   public void setApellido1(String apellido1) {
      this.apellido1 = apellido1;
   }

   public String getApellido2() {
      return apellido2;
   }

   public void setApellido2(String apellido2) {
      this.apellido2 = apellido2;
   }

   public String getDni() {
      return dni;
   }

   public void setDni(String dni) {
      this.dni = dni;
   }

   public String getEmail() {
      return email;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   public String getDireccion() {
      return direccion;
   }

   public void setDireccion(String direccion) {
      this.direccion = direccion;
   }

   public int getCp() {
      return cp;
   }

   public void setCp(int cp) {
      this.cp = cp;
   }

   public String getLocalidad() {
      return localidad;
   }

   public void setLocalidad(String localidad) {
      this.localidad = localidad;
   }

   public String getProvincia() {
      return provincia;
   }

   public void setProvincia(String provincia) {
      this.provincia = provincia;
   }

   public String getTitulacion() {
      return titulacion;
   }

   public void setTitulacion(String titulacion) {
      this.titulacion = titulacion;
   }

   public String getExperiencia() {
      return experiencia;
   }

   public void setExperiencia(String experiencia) {
      this.experiencia = experiencia;
   }

   public int getLogotipo() {
      return logotipo;
   }

   public void setLogotipo(int logotipo) {
      this.logotipo = logotipo;
   }

}



CLASE GuardarCargarObjetos

Código: Seleccionar todo
package com.dam204.trabajoevaluacion;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.StreamCorruptedException;
import java.util.ArrayList;

import android.content.Context;

public class GuardarCargarObjetos {

   static String filename = "CVsGuardados.dat";

   public static void Serializa(Context context, ArrayList a) {
      
      FileOutputStream fos;
      try {
         //fos = context.getApplicationContext().openFileOutput(filename, Context.MODE_PRIVATE);
         fos = context.openFileOutput(filename, Context.MODE_PRIVATE);

         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(a);
         oos.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }

   public static ArrayList Desserializa(Context context) {
      FileInputStream fin;
      ArrayList afromfile = null;

      try {
         fin = context.openFileInput(filename);
         ObjectInputStream ois = new ObjectInputStream(fin);
         afromfile = (ArrayList) ois.readObject();
         ois.close();
      } catch (StreamCorruptedException e) {
         e.printStackTrace();
      } catch (OptionalDataException e) {
         e.printStackTrace();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (ClassNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      
      return afromfile;

   }

}



ACTIVIDAD ListadoCV

Código: Seleccionar todo
package com.dam204.trabajoevaluacion;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;

public class ListadoCV extends ListActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.listadocv);

      // CREAMOS LA LISTA Y COMPROBAMOS SI EXISTE EL ARCHIVO, SI EXISTE LO
      // CARGAMOS

      ArrayList curriculums = new ArrayList();
      
      String filename = "CVsGuardados.dat";
      File fichero = new File(filename);
      if(fichero.exists()){
         curriculums = GuardarCargarObjetos.Desserializa(getApplicationContext());
      }

      
        /*String sFichero = "CVs_guardados.dat";
        File fichero = new File(sFichero);
        if (fichero.exists()) {
            
         try {
            curriculums = Serializador.cargarCVs();
         } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
           }   */   

      
       /* curriculums.add(new Curriculum("pepe", "fernandez", "martinez",
        "53169968-v", "[email protected]", "sdgsdgsd", 234235,
        "sdfsdfd", "sdgsdgds", "sdfgsdgsdg", "dfgdfgdfgdf",
        android.R.drawable.ic_dialog_info));
       
        curriculums.add(new Curriculum("mario", "perez", "sanchez",
        "34546576-x", "[email protected]", "sdgsdgsd", 287656,
        "sdfsdfd", "sdgsdgds", "sdfgsdgsdg",
        "dfgdfhhtgdfbhfdhhttegbrtgdfgdf",
        android.R.drawable.ic_dialog_info));*/
      

      Adaptador adaptador = new Adaptador(ListadoCV.this, curriculums);
      setListAdapter(adaptador);

   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.listado_cv, menu);
      return true;
   }

}



ACTIVIDAD VistaPrevia

Código: Seleccionar todo
package com.dam204.trabajoevaluacion;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class VistaPrevia extends Activity {

   TextView tv_titulo_previa, tv_nombre_completo, tv_dni, tv_email,
         tv_direccion, tv_cp, tv_localidad, tv_provincia, tv_titulacion,
         tv_experiencia;

   String nombre, apellido1, apellido2, dni, email, direccion, localidad,
         provincia, titulacion, experiencia;
   int cp;

   String nombre_completo;

   Button confirmar, reiniciar;

   ArrayList lista;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.vistaprevia);

      // CREAMOS LA LISTA Y COMPROBAMOS SI EXISTE EL ARCHIVO, SI EXISTE LO
      // CARGAMOS
      /*lista = new ArrayList();
      String sFichero = "CVs_guardados.dat";
      File fichero = new File(sFichero);
      if (fichero.exists()) {
         try {
            // lista1 = Serializador.cargarCVs();
            lista = Serializador.cargarCVs();
         } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }*/
      lista = new ArrayList();
      String filename = "CVsGuardados.dat";
      File fichero = new File(filename);
      if(fichero.exists()){
         lista = GuardarCargarObjetos.Desserializa(getApplicationContext());
      }

      // RECOGEMOS LOS DATOS ENVIADOS DESDE LA ACTIVIDAD ANTERIOR
      Bundle extras = getIntent().getExtras();
      nombre = extras.getString("nombre");
      apellido1 = extras.getString("apellido1");
      apellido2 = extras.getString("apellido2");
      dni = extras.getString("dni");
      email = extras.getString("email");
      direccion = extras.getString("direccion");
      cp = extras.getInt("cp");
      localidad = extras.getString("localidad");
      provincia = extras.getString("provincia");
      titulacion = extras.getString("titulacion");
      experiencia = extras.getString("experiencia");

      // ASIGNAMOS LOS DATOS RECIBIDOS DESDE LA ACTIVIDAD ANTERIOR A LOS
      // TextView DE ESTA ACTIVIDAD
      tv_titulo_previa = (TextView) findViewById(R.id.tv_titulo_previa);
      tv_titulo_previa.setText("CV de " + nombre + " " + apellido1);

      tv_nombre_completo = (TextView) findViewById(R.id.tv_nombre_completo);
      nombre_completo = apellido1 + " " + apellido2 + ", " + nombre;
      tv_nombre_completo.setText(nombre_completo);

      tv_dni = (TextView) findViewById(R.id.tv_dni);
      tv_dni.setText(dni);

      tv_email = (TextView) findViewById(R.id.tv_email);
      tv_email.setText(email);

      tv_direccion = (TextView) findViewById(R.id.tv_direccion);
      tv_direccion.setText(direccion);

      tv_cp = (TextView) findViewById(R.id.tv_cp);
      tv_cp.setText(Integer.toString(cp));

      tv_localidad = (TextView) findViewById(R.id.tv_localidad);
      tv_localidad.setText(localidad);

      tv_provincia = (TextView) findViewById(R.id.tv_provincia);
      tv_provincia.setText(provincia);

      tv_titulacion = (TextView) findViewById(R.id.tv_titulacion);
      tv_titulacion.setText(titulacion);

      tv_experiencia = (TextView) findViewById(R.id.tv_experiencia);
      tv_experiencia.setText(experiencia);

      // LINKAMOS LOS BOTONES DEL XML CON EL JAVA
      confirmar = (Button) findViewById(R.id.btn_confirmar);
      reiniciar = (Button) findViewById(R.id.btn_reiniciar);

      // BOTON CONFIRMAR
      confirmar.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick(View v) {

            // implementar la creacion del objeto de la clase Curriculum
            // implementar que se añada el objeto a la lista
            // implementar la serializacion de la lista de objetos

            Curriculum nuevoCV = new Curriculum(nombre, apellido1,
                  apellido2, dni, email, direccion, cp, localidad,
                  provincia, titulacion, experiencia, android.R.drawable.ic_dialog_info);

            // lista1.agregarCurriculum(nuevoCV);
            lista.add(nuevoCV);

            // Serializador.guardarCVs(lista1);
            //Serializador.guardarCVs(lista);
            GuardarCargarObjetos.Serializa(getApplicationContext(), lista);

            Intent intent = new Intent(VistaPrevia.this, Principal.class);
            startActivity(intent);
            finish();

         }
      });

      // BOTON REINICIAR
      reiniciar.setOnClickListener(new OnClickListener() {

         @Override
         public void onClick(View v) {

            Intent intent = new Intent(VistaPrevia.this, CrearCV.class);

            startActivity(intent);
         }
      });
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.vista_previa, menu);
      return true;
   }

   // SI LA ACTIVIDAD ENTRA EN PAUSA (NOS MOVEMOS A OTRA ACTIVIDAD), LA
   // ACTIVIDAD ACTUAL SE CIERRA
   @Override
   protected void onPause() {
      super.onPause();
      finish();
   }

}
Gracias  
Etiquetado en: