2010-12-28 18 views

Respuesta

22

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 a 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 se olvide de utilizar los permisos WRITE_EXTERNAL_STORAGE en el archivo de manifiesto.

+1

y no usa el contexto en él, de lo contrario se generará una excepción no identificable. – UMAR

+0

¿De dónde puedo obtener la clase SerializationTest? –

+0

SerializationTest es solo una referencia al directorio que está utilizando. Deberá obtenerlo de Android según sus propósitos. – IcedDante

-1

Este problema se puede resolver con la clase singleton here en la que puede establecer/obtener cualquier objeto, por ejemplo, arrayList en cualquier momento. Si utilizó el servicio Android, esta solución no es adecuada. Quizás la solución a su problema se puede encontrar here.

+0

no, no es útil para mí. – UMAR

1

Este problema no es realmente específico de Android. Me refiero a que si sabes cómo serializar tus datos a través de java.io.Serializable o si tienes un formato de persistencia personalizado, solo necesitas saber dónde guardarlo.

se puede agarrar un archivo en el dispositivo local a través de

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(); 
} 

Usted tendrá que utilizar openFileInput() después de leer los datos de nuevo.

O puede tomar almacenamiento externo. Esto es similar; sin embargo, debe garantizar que incluso existe. Al igual que el almacenamiento externo conectado e incluso puede escribirse. Como está escribiendo aquí una estructura de datos y, por lo general, el almacenamiento externo es legible en todo el mundo, no creo que sea una buena idea para los fines previstos (solo por lo que ha expuesto hasta ahora).

Si sus datos están estructurados y van a ser consultados muchas veces y puede ser bastante grande cargarlos siempre, entonces considere usar las herramientas lite sql que son parte del sistema operativo. Sin embargo, estoy asumiendo que no es necesario, ya que una simple lista es solo eso, una estructura lineal que probablemente podría buscar en un archivo (suponiendo que es menos de 1 MB de datos :)

+0

si usa el contexto, entonces el error de tirada serializable no es una excepción configurable porque el contexto no es serializable. sí, la idea es la misma pero sin usar el contexto. Gracias. – UMAR

+0

Como dije, asumo que tenía un objeto serializable. No estoy diciendo serializar el contexto. Estoy diciendo serializar el contenido de la lista que no ha descrito. Nunca deberías necesitar persistir en un contexto de todos modos. –

Cuestiones relacionadas