Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo puedo almacenar un arraylist de objetos personalizados?

He creado un arraylist que se compone de objetos de encargo. Básicamente, el usuario creará una clase y cada vez que se cree una clase, se agrega una nueva conferencia (mi objeto personalizado) al arraylist. Necesito guardar el arraylist generado para que las clases del usuario se guarden incluso cuando se reinicie la aplicación.

Desde mi entendimiento, tengo que hacer mi clase serializable. Pero, ¿cómo exactamente hago eso? Y luego una vez que su serializado ¿qué debo hacer?

  • ERROR: La aplicación requiere la versión API 14. La versión del API del dispositivo es 13 (Android 3.2.1)
  • Android y Lambda
  • Barra de progreso en la barra de notificación al cargar la imagen?
  • Creación de proyecto en Android 5.0 Lollipop con Eclipse Juno
  • Marcadores del centro API V2 de Google maps
  • Cambiar el color de fondo del menú android
  • public class Lecture{ public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public Lecture(String title, String startTime, String endTime, String day, boolean enable){ this.title = title; this.startTime = startTime; this.endTime = endTime; this.day = day; this.classEnabled = enable; } //Getters and setters below 

  • La biblioteca de Picasso dejó de funcionar hoy con los acoplamientos del cuadro del gráfico del facebook
  • Evite la corrupción de Android VideoView al girar de nuevo al retrato
  • Detectar que una aplicación está instalada o no?
  • Recomendaciones para producir aplicaciones portátiles entre Android y "otras plataformas"
  • ¿Cómo hacer que una aplicación android vuelva a la última actividad abierta cuando se relanza?
  • Mostrar barra de herramientas para el marcador de Google Maps automáticamente
  • 3 Solutions collect form web for “¿Cómo puedo almacenar un arraylist de objetos personalizados?”

    Tienes suerte, todos los miembros de tu clase ya son serializables, así que tu primer paso es decir que Lecture es Serializable.

     public class Lecture implements Serializable { public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public Lecture(String title, String startTime, String endTime, String day, boolean enable){ this.title = title; this.startTime = startTime; this.endTime = endTime; this.day = day; this.classEnabled = enable; } 

    A continuación, debe crear un constructor predeterminado, ya que la serialización parece requerirlo. Lo último es que necesitas escribir tu objeto en un archivo. Usualmente uso algo como lo siguiente. Tenga en cuenta que esto es para guardar un estado de juego, por lo que quizás no quiera usar el directorio de caché.

     private void saveState() { final File cache_dir = this.getCacheDir(); final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE); FileOutputStream fos = null; ObjectOutputStream oos = null; boolean keep = true; try { fos = new FileOutputStream(suspend_f); oos = new ObjectOutputStream(fos); oos.writeObject(this.gameState); } catch (Exception e) { keep = false; Log.e("MyAppName", "failed to suspend", e); } finally { try { if (oos != null) oos.close(); if (fos != null) fos.close(); if (keep == false) suspend_f.delete(); } catch (Exception e) { /* do nothing */ } } } 

    La lectura de los datos de vuelta es bastante simétrica a la escritura por lo que he dejado que fuera para esta respuesta. Además, todavía hay un montón de advertencias a los objetos Serialized por lo que le sugiero hacer algunas búsquedas de Google y leer sobre la serialización de Java en general.

    Utilizo una clase en una aplicación Meteorológica que estoy desarrollando …

     public class RegionList extends ArrayList<Region> {} // Region implements Serializeable 

    Para guardar, uso código como este …

     FileOutputStream outStream = new FileOutputStream(Weather.WeatherDir + "/RegionList.dat"); ObjectOutputStream objectOutStream = new ObjectOutputStream(outStream); objectOutStream.writeInt(uk_weather_regions.size()); // Save size first for(Region r:uk_weather_regions) objectOutStream.writeObject(r); objectOutStream.close(); 

    NOTA: Antes de escribir los objetos Region, escribo un int para guardar el 'tamaño' de la lista.

    Cuando leo de nuevo, hago esto …

     FileInputStream inStream = new FileInputStream(f); ObjectInputStream objectInStream = new ObjectInputStream(inStream); int count = objectInStream.readInt(); // Get the number of regions RegionList rl = new RegionList(); for (int c=0; c < count; c++) rl.add((Region) objectInStream.readObject()); objectInStream.close(); 

    Utilice System.Runtime.Serialization. Puedes ver un ejemplo aquí: http://blog.kowalczyk.info/article/Serialization-in-C.html

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.