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!
- Java lanza NotSerializableException después de agregar su propia interfaz
- Escribir XML en Android
- JSONObject no serializable?
- Enfoque para serializar la clase de modelo de punto final de nube en el sistema de archivos Android
- Serialización Gson dependiendo del valor del campo
- Java.io.NotSerializableException al escribir objeto Serializable a un almacenamiento externo?
- Orden Android Parcelable
- Cómo serializar doble valor utilizando kSOAP en Android
- Parcelable encontrado IOException writing serializable object getactivity ()
- Serialización de objetos XML de Android
- Cómo pasar el objeto serializado gson a Intent en android?
- Android Realm - Objeto de Realm de paso usando Intent
- ¿Pasar el objeto GoogleApiClient a otra actividad?
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.
- Dónde guardar los archivos de texto en el proyecto de Android en eclipse
- ¿Por qué recibo siempre la misma respuesta de prueba de android-lvl?