Cómo guardar / guardar objetos de clase personalizados en Android?

Quiero guardar el objeto ArrayList<CustomClass> en algún lugar del almacenamiento de Android para recuperarlo rápidamente y mostrar datos en él.

¿Es esto posible o no? En caso afirmativo, ¿qué técnica será adecuada, SQLite o almacenamiento externo?

ejemplo.

 public class MyClass implements Serializable { private static final long serialVersionUID = 1L; public String title; public String startTime; public String endTime; public String day; public boolean classEnabled; public MyClass(String title, String startTime, boolean enable) { this.title = title; this.startTime = startTime; this.classEnabled = enable; } public boolean saveObject(MyClass obj) { final File suspend_f=new File(SerializationTest.cacheDir, "test"); FileOutputStream fos = null; ObjectOutputStream oos = null; boolean keep = true; try { fos = new FileOutputStream(suspend_f); oos = new ObjectOutputStream(fos); oos.writeObject(obj); } catch (Exception e) { keep = false; } finally { try { if (oos != null) oos.close(); if (fos != null) fos.close(); if (keep == false) suspend_f.delete(); } catch (Exception e) { /* do nothing */ } } return keep; } public MyClass getObject(Context c) { final File suspend_f=new File(SerializationTest.cacheDir, "test"); MyClass simpleClass= null; FileInputStream fis = null; ObjectInputStream is = null; try { fis = new FileInputStream(suspend_f); is = new ObjectInputStream(fis); simpleClass = (MyClass) is.readObject(); } catch(Exception e) { String val= e.getMessage(); } finally { try { if (fis != null) fis.close(); if (is != null) is.close(); } catch (Exception e) { } } return simpleClass; } 

Y llamando desde la actividad

 if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCustomObject"); else cacheDir= getCacheDir(); if(!cacheDir.exists()) cacheDir.mkdirs(); MyClass m = new MyClass("umer", "asif", true); boolean result = m.saveObject(m); if(result) Toast.makeText(this, "Saved object", Toast.LENGTH_LONG).show(); else Toast.makeText(this, "Error saving object", Toast.LENGTH_LONG).show(); MyClass m = new MyClass(); MyClass c = m.getObject(this); if(c!= null) Toast.makeText(this, "Retrieved object", Toast.LENGTH_LONG).show(); else Toast.makeText(this, "Error retrieving object", Toast.LENGTH_LONG).show(); 

No olvide utilizar los permisos write_external_storage en el archivo de manifiesto.

Este problema no es realmente específico de Android. Quiero decir, si sabe cómo serializar sus datos ya sea a través de java.io.Serializable o tiene un formato de persistencia personalizado, sólo tiene que saber dónde almacenarlo.

Puede tomar un archivo en el dispositivo local

 FileOutputStream stream = null; try{ stream = mContext.openFileOutput("name.data", Context.MODE_PRIVATE); DataOutputStream dout = new DataOutputStream(stream); dout.writeObject(myArrayList); dout.flush(); stream.getFD().sync(); catch(IOException e) { //Do something intelligent } finally { stream.close(); } 

Tendrás que usar openFileInput () más tarde para leer los datos.

O puede tomar Almacenamiento externo. Esto es similar sin embargo usted tiene que garantizar que incluso existe. Al igual que el almacenamiento externo conectado e incluso capaz de ser escrito. Puesto que usted está escribiendo una estructura de datos aquí y por lo general el almacenamiento externo es mundo legible no creo que esto es una buena idea para sus propósitos previstos (sólo de lo que ha puesto hasta ahora).

Si sus datos están estructurados y va a ser consultado muchas veces y podría ser bastante grande para cargar siempre a continuación, considere el uso de las herramientas de sql lite que forman parte del sistema operativo. Sin embargo, estoy asumiendo que no necesita esto ya sea como una simple lista es sólo eso, una estructura lineal que probablemente podría buscar a través de un archivo (suponiendo que es inferior a 1 MB de datos 🙂

Este problema puede ser resuelto por la clase singleton aquí en la que puede establecer / obtener cualquier objeto, por ejemplo, arrayList en cualquier momento. Si usaste Android Service entonces este solutuion no es adecuado. Tal vez la solución a su problema se puede encontrar aquí .

  • La aplicación se bloquea sólo en la versión de lanzamiento
  • Android: Bug con ThreadSafeClientConnManager descargar imágenes
  • Cómo analizar JSON Array (Not Json Object) en Android
  • Android: centra el título de la barra de herramientas
  • Correo java - obtener mensaje por ID de mensaje
  • TimerTask ya está programado
  • MathML y ​​Java
  • ¿Puedo procesar anotaciones jaxb en tiempo de compilación?
  • Android Camera.takePicture ha fallado
  • Android: ListView no muestra ningún resultado
  • Hora del formato de la clase de tiempo de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.