Serializar una ArrayList

Estoy tratando de escribir un juego de Android y me gustaría poder pausar el juego, incluso si el usuario quiere volver al menú principal o la actividad es asesinado por el sistema. OnSaveInstanceState no parece darme un montón de control sobre cuándo puedo leer el paquete de vuelta, además de lo que puedo decir, el paquete es sólo bueno por períodos cortos de tiempo. Así que quiero serializar unas cuantas ArrayLists que tengo, luego leerlas de nuevo. No obtengo errores de compilación ni el programa falla. Pero, los datos nunca se escriben o nunca se lee. No estoy seguro de cuál. Mi método serializeData se llama en onDestroy y el deserializeData se llama desde onCreate. Aquí está mi código para escribir y leer los datos:

public void serializeData(String filename, ArrayList<String>arrayList) { FileOutputStream fos; try { fos = openFileOutput(filename, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(arrayList); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } @SuppressWarnings("unchecked") private void deserializeData(String filename, ArrayList<String>arrayList){ try{ FileInputStream fis = openFileInput(filename); ObjectInputStream ois = new ObjectInputStream(fis); arrayList = (ArrayList<String>)ois.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); } } 

Cualquier ayuda sería muy apreciada! ¡Gracias por adelantado!

Permítanme decirles una cosa: nunca utilice el método onDestroy () para guardar sus datos. Utilice onPause () o onStop () en su lugar. Nunca debe contar con el método onDestroy () para guardar datos o llamar a algunas funciones.

Use onDestroy para cerrar conexiones y terminar de usar recursos y similares. Si desea leer más sobre esto, debe echar un vistazo aquí.

Aparte de eso, tu código parece estar bien. Sólo tienes que añadir una cosa más: pon un oos.flush () justo encima de oos.close ().

Y no olvide cerrar el objeto objectInputStream.

Gracias.

No puedo ver un problema obvio con ese código.

Intentaría agregar algún código después de cerrar ObjectOutputStream y antes de abrir ObjectInputStream para imprimir el nombre absoluto y el tamaño del archivo.

Durante la serialización puede escribir en ByteArrayOutputStream y luego decodificar los bytes en cadena utilizando el conjunto de caracteres predeterminado de la plataforma. Guarde esta cadena en SharedPreferences. Mientras que deserializing, apenas consigue los bytes de la secuencia y crea ByteArrayInputStream usando esto y lo introduce a ObjectInputStream.
¿Está seguro de que su actividad está siendo asesinada? Podría ser el caso de que su actividad oscila entre onPasue / onResume.

  • ¿Recomendaciones para datos persistentes en Android?
  • ¿Cuál es la mejor manera de serializar una imagen (compatible con Swing) de Java a Android?
  • BroadcastReceiver ClassNotFound Exception
  • Serialización y subclases
  • Guardar matriz de objetos personalizados en estado de instancia
  • ObjectInputStream me da un objeto vacío (pero el archivo leído no está vacío)
  • Serialización v / s
  • Problemas de serialización java con JVM diferentes
  • ¿Cuál es la mejor manera de diseñar un servidor GWT "independiente de la plataforma"?
  • El servicio de Android no se puede iniciar debido a un ClassNotFoundException de una clase que ya no existe
  • Ahorro de grandes arreglos cortos android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.