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?

  • AndroidManifest en el directorio androidTest que se ignora
  • Cómo obtener la ruta de la imagen capturada en android utilizando la intención de la cámara
  • Las expresiones Lambda se bloquean con IncompatibleClassChangeError en Android cuando se usa jack
  • Error al cargar sdk cuando se inicia eclipse
  • Android: establece el intervalo en SeekBar
  • Defina una cadena en gradle y también use una aplicación específica de saborId
  • 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 

  • Intención putExtra ArrayList <NameValuePair>
  • StatusBarNotification cómo obtener datos o reenviar la intención?
  • ¿Cómo detectar datos de entrada a través de la toma de audio?
  • Cómo obtener el nombre del recurso desde el ID del recurso
  • ¿Dónde guardar imágenes en Android?
  • ¿Rollo horizontal en textview en androide?
  • 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.