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?
- SparseBooleanArray.equals () no funciona como se esperaba
- ¿Cómo bloquear mediante programación la pantalla en Android?
- No se puede reinstalar el Sony SmartWatch Control
- ¿Cómo se presentan los objetos Java en la memoria en Android?
- Error "HTTP / 1.1 401 no autorizado" con autenticación básica en android - EWS 2010
- ¿Debo evitar estrictamente el uso de enums en Android?
- Tratar métodos obsoletos en android
- ¿Por qué se utiliza FrameLayout para fragmentos?
- Eliminar una actividad de la pila en android
- Cómo llamar a un servicio web SOAP en Android
- ¿Por qué no desaparece el teclado virtual?
- Lectura de código QR con cámara - Android
- Nombre del paquete Java / Android, por ejemplo, código
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í .
- ¿Cómo puedo colocar el texto dentro de un widget EditText en la parte superior?
- Android View onSaveInstanceState no se llama