2010-12-29 15 views
13

amigos,java.io.NotSerializableException mientras se escribe objeto Serializable en el almacenamiento externo?

Estoy usando el siguiente código para escribir objetos serializables para el almacenamiento externo.

me arroja error java.io.NotSerializableException incluso mi objeto es serializable cualquiera me guía qué error estoy haciendo?

public class MyClass implements Serializable 
{ 

// other veriable stuff here... 
    public String title; 
    public String startTime; 
    public String endTime; 
    public boolean classEnabled; 
    public Context myContext; 

public MyClass(Context context,String title, String startTime, boolean enable){ 
      this.title = title; 
      this.startTime = startTime; 
      this.classEnabled = enable; 
      this.myContext = context; 

} 

public boolean saveObject(MyClass obj) { 

     final File suspend_f=new File(cacheDir, "test"); 

      FileOutputStream fos = null; 
      ObjectOutputStream oos = null; 
      boolean   keep = true; 

      try { 
       fos = new FileOutputStream(suspend_f); 
       oos = new ObjectOutputStream(fos); 
       oos.writeObject(obj); // exception throws here 
      } 
      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; 


     } 

} 

y llamando a la clase de actividad para guardarlo

MyClass m= new MyClass(this, "hello", "abc", true); 
boolean result =m.saveObject(m); 

cualquier ayuda se agradece.

Respuesta

53

Esto falla debido al campo Contexto en su clase. Los objetos contextuales no son serializables.

Por Serializable documentation - "Al atravesar un gráfico, se puede encontrar un objeto que no admite la interfaz Serializable. En este caso, se lanzará la NotSerializableException e identificará la clase del objeto no serializable".

Puede eliminar el campo Contexto por completo o aplicar el atributo transitorio al campo Contexto para que no se serialice.

public class MyClass implements Serializable 
{ 
    ... 
    public transient Context myContext; 
    ... 
} 
+0

¿cuál es la solución? ¿alguna idea? – UMAR

+1

Respuesta actualizada en lo que respecta a su comentario – JesusFreke

+0

sí quité contexto y ahora está funcionando bien. Gracias. – UMAR

Cuestiones relacionadas