将Serializable对象写入外部存储时java.io.NotSerializableException?

时间:2010-12-29 06:20:23

标签: android serialization

朋友,

我正在使用以下代码将Serializable对象写入外部存储。

它抛出了我的错误java.io.NotSerializableException 即使我的对象是可序列化的,任何人都可以指导我在做什么错误?

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;


        }

}

并从活动类调用以保存它

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:54)

由于您的类中的Context字段,此操作失败。上下文对象不可序列化。

根据Serializable documentation - “当遍历图形时,可能会遇到不支持Serializable接口的对象。在这种情况下,将抛出NotSerializableException并识别非可序列化对象的类。 “

您可以完全删除Context字段,也可以将transient属性应用于Context字段,以便它不被序列化。

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